vuejs中父组件数据变化不更新子组件
Parent's data change does not update child component in vuejs
我有以下内容:
Vue.component('times-updated', {
template: '<span>Times Updated: {{ timesUpdated }}</span>',
data: function() {
return {
timesUpdated: this.$parent.myData.timesUpdated
}
}
});
var vm = new Vue({
el: '#test',
data: function() {
return {
myData: {}
}
}
})
setInterval(function(){
$.ajax({
url: `${window.location.href}/json`, // This just returns an array : array.timesUpdated: 2 etc
}).done(function (data) {
vm.myData = data; // changes this data
});
}, 1000)
并且正在使用以下 html:
<div class="test">
<times-updated></times-updated>
</div>
我轮询一个 REST API returns 一个包含 timesUpdated 的数组 属性:
{
timesUpdated: 5
}
我的意图是每一秒我使用jQuery的$.ajax
方法调用API,更新vm
上的myData
数据对象,然后将更新 times-updated
组件。
该代码在初始页面加载时有效,times-updated
组件可以检索其父级 myData
属性 上的值,但虽然我已经确认 vm.myData
确实如此反映来自 API 的新值,组件不会更新其显示以显示新计数。
我做错了什么?
只有组件需要回调
// vue instance
new Vue({
data: {
status: true
}
};
// vue components (callback)
Vue.component('custom-component', {
data: function() {
return {
status: false
}
}
});
数据函数在组件的生命周期内只被调用一次;最初创建时。所以本质上,您的组件只是显示创建组件时存在的值。
此外,从组件中伸出手来获取数据值通常是一种不好的做法。 Vue 是 props down, events up。您应该将组件转换为使用 属性.
Vue.component('times-updated', {
props:["times"],
template: '<span>Times Updated: {{ times }}</span>',
})
在这种特殊情况下,您使用函数来定义 Vue 的事实并不重要,这不是典型的做法。组件 需要 一个函数,因为它们需要一个独立的作用域。
这是一个example。
我有以下内容:
Vue.component('times-updated', {
template: '<span>Times Updated: {{ timesUpdated }}</span>',
data: function() {
return {
timesUpdated: this.$parent.myData.timesUpdated
}
}
});
var vm = new Vue({
el: '#test',
data: function() {
return {
myData: {}
}
}
})
setInterval(function(){
$.ajax({
url: `${window.location.href}/json`, // This just returns an array : array.timesUpdated: 2 etc
}).done(function (data) {
vm.myData = data; // changes this data
});
}, 1000)
并且正在使用以下 html:
<div class="test">
<times-updated></times-updated>
</div>
我轮询一个 REST API returns 一个包含 timesUpdated 的数组 属性:
{
timesUpdated: 5
}
我的意图是每一秒我使用jQuery的$.ajax
方法调用API,更新vm
上的myData
数据对象,然后将更新 times-updated
组件。
该代码在初始页面加载时有效,times-updated
组件可以检索其父级 myData
属性 上的值,但虽然我已经确认 vm.myData
确实如此反映来自 API 的新值,组件不会更新其显示以显示新计数。
我做错了什么?
只有组件需要回调
// vue instance
new Vue({
data: {
status: true
}
};
// vue components (callback)
Vue.component('custom-component', {
data: function() {
return {
status: false
}
}
});
数据函数在组件的生命周期内只被调用一次;最初创建时。所以本质上,您的组件只是显示创建组件时存在的值。
此外,从组件中伸出手来获取数据值通常是一种不好的做法。 Vue 是 props down, events up。您应该将组件转换为使用 属性.
Vue.component('times-updated', {
props:["times"],
template: '<span>Times Updated: {{ times }}</span>',
})
在这种特殊情况下,您使用函数来定义 Vue 的事实并不重要,这不是典型的做法。组件 需要 一个函数,因为它们需要一个独立的作用域。
这是一个example。