我正在学习Vue.js,并且已经能够编写一个简单的列表/详细信息应用程序。选择第一项将为详细信息组件提供正确的数据,但是当我选择其他项目时,详细信息组件将不会重新加载正确的信息。
例如:
<template>
<div>
<detail :obj="currentObject"></detail>
</div>
</template>
<script>
export default: {
data: function(){
return {
currentObject: null,
objs = [
{name:'obj 1'},
{name:'obj 2'}
]
};
}
}
</script>
当我执行this.currentObject = objs[0]
时,组件detail
会更新为正确的内容。但是,下次我调用this.currentObject = objs[1]
时,组件detail
不再更新。
答案 0 :(得分:5)
不确定您在currentObject
上切换数据的上下文是什么,但是下面是概念详细信息组件,当您切换objs
时,它会更新道具:obj
并似乎工作正常。
在查看代码时,您应该使用objs
而不是:
来声明=
。
data: function() {
return {
currentObject: null,
objs: [
{name:'obj 1'},
{name:'obj 2'}
]
};
}
这是概念详细信息组件,运行代码片段以检查其是否有效。
Vue.component('detail', {
props: ['obj'],
template: '<div>{{ obj }}</div>'
})
var app = new Vue({
el: '#app',
data() {
return {
bToggle: false,
currentObject: null,
objs: [
{name:'obj 1'},
{name:'obj 2'}
]
}
},
created(){
this.switchData();
},
methods: {
switchData() {
if(!this.bToggle){
this.currentObject = this.objs[0];
}else{
this.currentObject = this.objs[1];
}
this.bToggle = !this.bToggle;
}
}
})
<script src="https://cdn.jsdelivr.net/npm/vue@2.5.17/dist/vue.js"></script>
<div id="app">
<button @click="switchData()"> switch </button>
<detail :obj="currentObject"></detail>
</div>