避免在运行时向Vue实例或其根$ data添加反应属性 - 在数据选项中预先声明它。

时间:2017-02-07 17:16:35

标签: laravel vue.js

使用VueJS2我有点困惑。我在数据容器中添加了一些变量,以便将其发送到我的API。这工作正常,但Vue给我一个警告/错误信息,我不知道如何解决:

  

避免将反应属性添加到Vue实例或其根$ data   在运行时 - 在数据选项中预先声明它。

var app = new Vue({
    el: '#app',
    data: {
        incidentReference: '',
        streetName: '',
        latitude: '',
        longitude: '',
        featureTypeId: 1,
        archived: 0
    },

    computed: {
        href() {
            return '#' + this.name.toLowerCase().replace(/ /g, '-');
        }
    },

    mounted: function () {
        this.getIncidents();
    },

    methods: {
        onSubmit() {
            axios.post('/api/v1/incidents', this.$data)
                .then(response => alert('Success'))
                .catch(error => {
                    console.log(error.response);
                })
        },

        getIncidents: function() {
            console.log('getIncidents');
            var self = this;
            axios.get('/api/v1/incidents').then(function(response) {
                // set data on vm
                console.log(response.data);
                var incidentsReceived = response.data.data.map(function (incident) {
                    return incident;
                });
                Vue.set(self, 'incidents', incidentsReceived);
            });
        }
    }
});

2 个答案:

答案 0 :(得分:3)

您正在为API的响应创建新的反应属性

Vue.set(self, 'incidents', incidentsReceived);

不确定您是否拼错了属性的名称或忘记创建该属性。只需使用data部分

上的现有媒体资源即可
Vue.set(self, 'incidentReference', incidentsReceived); //change property name

data: {
    incidents: null, //or create this property
},  

答案 1 :(得分:3)

在我的案例中,使用Jest进行单元测试时,我设置了selected,但没有安装组件,因此出现了此错误。

  wrapper.setData({
  selected: recipients,
});

因此在组件上创建了属性,然后工作正常。