0

I created vue js in visual studio 2017 . I want this this will be interacting with loopback API .When I run the applications , I want to do CRUD operations with loopback API. But I am getting errors in this line

let catApp = new Vue({ // js expected

I already imported necessary classes for example import Vue from 'vue'.

Here is the code for APP.vue .

<template>
    <div id="catApp" v-cloak>

        <h1>Cats</h1>
        <table>
            <thead>
                <tr>
                    <th>Name</th>
                    <th>Age</th>
                    <th>Gender</th>
                    <th>Breed</th>
                    <td>&nbsp;</td>
                </tr>
            </thead>
            <tbody>
                <tr v-for="cat in cats">
                    <td @click="editCat(cat)" class="catItem" title="Click to Edit">{{cat.name}}</td>
                    <td>{{cat.age}}</td>
                    <td>{{cat.gender}}</td>
                    <td>{{cat.breed}}</td>
                    <td @click="deleteCat(cat)" class="deleteCat" title="Click to Delete">Delete</td>
                </tr>
            </tbody>
        </table>

        <form @submit.prevent="storeCat">
            <p>
                <label for="name">Name</label>
                <input type="text" id="name" v-model="cat.name">
            </p>
            <p>
                <label for="age">Age</label>
                <input type="number" id="age" v-model="cat.age">
            </p>
            <p>
                <label for="breed">Breed</label>
                <input type="text" id="breed" v-model="cat.breed">
            </p>
            <p>
                <label for="gender">Gender</label>
                <input type="text" id="gender" v-model="cat.gender">
            </p>
            <input type="reset" value="Clear" @click="reset">
            <input type="submit" value="Save Cat 🐱">
        </form>
    </div>

    <script src="https://unpkg.com/vue"></script>
    <script src="js/app.js"></script>
</template>

<script>
    import Vue from 'vue';
    import Home from './components/Home.vue';
    const API = 'http://localhost:3000/api/cats/';
    export default {
        name: 'app',
        components: {
            Home
        }


let catApp = new Vue({
    el:'#catApp',
    data:{
        cats:[],
        cat:{
            id:'',
            name:'',
            age:'',
            gender:'',
            breed:''
        }
    },
    created:function() {
        this.getCats();
    },
    methods:{
        getCats:function() {
            fetch(API)
            .then(res => res.json())
            .then(res => this.cats = res);  
        },
        storeCat:function() {
            let method;
            console.log('storeCat', this.cat);
            // Handle new vs old
            if(this.cat.id === '') {
                delete this.cat.id;
                method = 'POST';
            } else {
                method = 'PUT';
            }
            fetch(API, {
                headers:{
                    'Content-Type':'application/json'
                },
                method:method,
                body:JSON.stringify(this.cat)
            })
            .then(res => res.json())
            .then(res => {
                this.getCats();
                this.reset();
            });
        },
        deleteCat:function(c) {
            fetch(API + c.id, {
                headers:{
                    'Content-Type':'application/json'
                },
                method:'DELETE'
            })
            .then(res => res.json())
            .then(res => {
                this.getCats();
            });

            // call reset cuz the cat could be 'active'
            this.reset();
        },
        editCat:function(c) {
            /*
            This line was bad as it made a reference, and as you typed, it updated
            the list. A user may think they don't need to click save.
            this.cat = c;
            */
            this.cat.id = c.id;
            this.cat.name = c.name;
            this.cat.age = c.age;
            this.cat.breed = c.breed;
            this.cat.gender = c.gender;
        },
        reset:function() {
            this.cat.id = '';
            this.cat.name = '';
            this.cat.age = '';
            this.cat.breed = '';
            this.cat.gender = '';
        }
    }
});

    };
</script>

<style>
</style>
1
  • I thought <script src="https://unpkg.com/vue"></script> <script src="js/app.js"></script> should be put under </template> Commented Jul 16, 2019 at 2:55

1 Answer 1

0

Your new Vue assignment is inside of your export default block. Move your assignment out of it. Did you forget to close it with a }?

export default {
        name: 'app',
        components: {
            Home
        }

// THIS IS INSIDE THE export default block...
let catApp = new Vue({

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.