【问题标题】:Vuejs component doesn't update when changing variable更改变量时Vuejs组件不更新
【发布时间】:2018-11-04 02:11:07
【问题描述】:

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

【问题讨论】:

    标签: vue.js vuejs2 vue-component


    【解决方案1】:

    不确定您在currentObject 上切换数据的上下文是什么,但下面是一个概念详细信息组件,当您切换objs 时,它更新了prop :obj 并且似乎工作正常。

    查看您的代码,您应该使用: 而不是= 声明objs

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

    这里是概念细节组件,运行 sn-p 来检查它是否工作。

    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>

    【讨论】:

    • 这虽然不是完整的解决方案,但为我指明了正确的方向。就像@cal_br_mar 提到的一样,我错过的是obj 属性上的watch,这样当它改变一些逻辑时——示例中没有——也会运行。
    猜你喜欢
    • 2016-08-08
    • 2017-09-13
    • 2017-12-31
    • 2019-07-15
    • 1970-01-01
    • 2019-03-20
    • 2018-05-08
    • 1970-01-01
    • 2017-08-03
    相关资源
    最近更新 更多