更改变量时,Vuejs组件不会更新

Cel*_*lso 2 vue.js vue-component vuejs2

我正在学习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>
Run Code Online (Sandbox Code Playgroud)

当我使用正确的内容this.currentObject = objs[0]进行组件detail更新时.但是,下次我打电话时this.currentObject = objs[1],组件detail不再更新.

小智 5

不确定你的数据在你的上下文是什么currentObject,但下面是一个概念细节组件,当你切换objs它时,更新了道具:obj并且似乎工作正常.

查看代码,您应该声明objs使用:not =.

data: function() {
    return {
      currentObject: null,
      objs: [
        {name:'obj 1'},
        {name:'obj 2'}
      ]
   };
 }
Run Code Online (Sandbox Code Playgroud)

这是概念细节组件,运行代码片段以检查它是否正常工作.

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;
   }
  }
})
Run Code Online (Sandbox Code Playgroud)
<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>
Run Code Online (Sandbox Code Playgroud)