所以我有相当长的vue应用程序,我无法在此粘贴,但我会尽力解释发生了什么。
所以我有一个vue应用程序和3个组件:comp1,comp2和comp3。
comp1
comp2
渲染很好,但出于某种原因我尝试渲染comp3
时:comp1
和comp2
自行渲染(更新事件)触发器或其他东西)。
comp3
仅使用pickedItems
和comp1
未使用的comp2
变量。
我的root vue应用程序的数据属性定义如下:
data: {
...
//Items to pick from in individual mode
pickedItems: []
...
},
然后在我的模板中我做了这样的事情:
<div v-for="(wgt, idx) in cb.widgets" class="cb-wgt">
...
<div class ="wgt">
<button type="search" class="btn btn-default" v-on:click.prevent="searchForContent(idx)">Search</button>
</div>
...
</div>
searchForContent
的代码如下所示:
searchForContent(idx) {
var that = this;
var wgt = that.widgets[idx];
var s = wgt.search ? wgt.search : "";
var promise = $.ajax({
url: '/landings/get_data',
type: 'GET',
data: {search: s},
timeout: 600
}).done(function(ajaxResponse) {
//vue.set(that.pickedItems, idx, ajaxResponse.pickedItems);
that.pickedItems[idx] = ajaxResponse.pickedItems;
console.log('that.pickedItems', that.pickedItems);
}).fail(function(response) {
});
},
但是我设置that.pickedItems[idx]
的时刻 - &gt; comp1
和comp2
消失 - 为什么?
我是一个不错的人,花了好几个小时试图解决这个问题,希望有一些指示。
更新1
我认为我的问题与此有关(来自vue docs):
由于JavaScript的限制,Vue无法检测到以下内容 对数组的更改:当您使用索引直接设置项目时, 例如
vm.items[indexOfItem] = newValue
为了克服警告,两者都有 以下内容将完成与vm.items[indexOfItem] = newValue
相同的操作,但也会触发反应中的状态更新 系统:// Vue.set
Vue.set(vm.items, indexOfItem, newValue)
^反应系统中的状态更新正是我认为我所患的。