如何在 VueJS 中的 child 组件的 ready() 中访问动态道具

How to access dynamic props inside a child component's ready() in VueJS

我已经通过动态属性将 parent 的数据动态绑定到 child(objectives 是一个通过 AJAX 获取的数组):

<objective-selector :objectives="objectives"></objective-selector>

objective-selectorready() 钩子中,我想做一些 pre-processing 并且不知何故 this.objectives 是一个可观察的,而不是一个数组:

Vue.component('objective-selector',{
   template: '#objective-selector-template',
   data:function() {
       return {
            current_selected:0
       }
   },
   ready:function(){
        // set current selected to the first non-active objective
       for (var i =0; i < this.objectives.length; ++i) {
           if (this.objectives[i].active == false) {
               this.current_selected = i;
               break;
           }
       }    
    },
   props: ['objectives']
});

其他一切正常(例如,我可以使用 objectives 道具作为模板中的数组)。如何在 ready() 中将其作为数组访问?

您的 ready 函数在 ajax 响应从服务器返回之前按顺序触发。所以你需要在之后触发该功能。

一个简单的方法是 $broadcast 当值从父级返回时。

compiled: function(){
    this.$on('theDataCameBackFromTheServer',function(){
        for (var i =0; i < this.objectives.length; ++i) {
               if (this.objectives[i].active == false) {
                   this.current_selected = i;
                   break;
               }
        }
    });
}

另一种解决方案是使用 watch(每次目标更改时都会触发):

watch: {
     objectives: function(){
          for (var i =0; i < this.objectives.length; ++i) {
           if (this.objectives[i].active == false) {
               this.current_selected = i;
               break;
           }
       } 
     }
}