代码之家  ›  专栏  ›  技术社区  ›  fpcjh

从主Vue访问变量。组件VM中的js实例

  •  1
  • fpcjh  · 技术社区  · 9 年前

    这是一个非常简单的Vue应用程序,它将道具从主虚拟机传递到组件。在我的实际应用程序中,这个值是通过vue资源获取的。

    https://jsbin.com/tazuyupigi/1/edit?html,output

    当然可以,但我很难从组件VM本身访问这个值。

    https://jsbin.com/hurulavoko/1/edit?html,output

    如你所见,我的警报显示为未定义。我怎样才能解决这个问题?执行顺序似乎有问题,但使用 compiled() created() 代替 ready() 没有区别。

    1 回复  |  直到 9 年前
        1
  •  2
  •   Jeff    9 年前

    这是执行顺序的问题。主Vue实例在其内部的东西被编译之后才“就绪”。这包括 hello 组成部分

    如果你需要知道 bar 在使用之前已设置,您可以通过几种方式进行监控。你可以 $broadcast 家长中的一个事件,让孩子知道 酒吧 已加载。或者你可以使用 watch 函数在子组件中进行更改 酒吧 更新。

    如果你 $set 酒吧 在里面 created() ,然而 vue-resource 不管怎样,你都会有延误,所以你需要考虑以下事实 greeting 在孩子的时候不会准备好 ready() 作用您要么必须设计DOM结构来处理以下事实 招呼 可以是 undefined ,否则您必须使用事件或 函数来自己等待它。

    示例: $广播 :

    Vue.component('hello', {
      template: 'From hello tag: {{ greeting }}',
      props: ['greeting'],
      ready: function() {
    
      },
      events:{
        'bar-ready':function(){
            alert(this.greeting)
        }
      }
    });
    new Vue({
        el: '#app',
        created: function() {
            this.$http.get('/path')
                .then(function(response){
                    this.$set('bar',response.data);
                    this.$broadcast('bar-ready')
                }.bind(this))
        }
    });
    

    $广播 文档: https://vuejs.org/api/#vm-broadcast