更改变量时Vue.js组件不会更新

时间:2018-11-04 02:11:07

标签: vue.js vuejs2 vue-component

我正在学习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不再更新。

1 个答案:

答案 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>