从组件 VM 中的主 Vue.js 实例访问变量
这是一个非常简单的 Vue 应用,它将一个 prop 从主 VM 传递到组件。在我的实际应用中,此值是通过 vue-resource 获取的。
https://jsbin.com/tazuyupigi/1/edit?html,output
当然可以,但我很难从组件 VM 本身访问此值。
https://jsbin.com/hurulavoko/1/edit?html,output
如您所见,我的警报显示未定义。我该如何修复此问题?似乎是执行顺序的问题,但使用
compiled()
或
created()
代替
ready()
没有任何区别。
这是执行顺序的问题。主 Vue 实例在其内部内容编译完成之前不会“准备就绪”。这包括
hello
组件。
如果您需要在使用
bar
之前知道它已设置,您可以通过几种方式进行监控。您可以在父级中
$broadcast
事件,让子级知道
bar
已加载。或者,您可以在子组件中使用
watch
函数,在
bar
更新时进行更改。
如果您在
created()
中
$set
bar
,您的示例确实有效,但是使用
vue-resource
无论如何都会有延迟,因此您需要考虑到
greeting
在子级的
ready()
函数期间不会准备就绪。您要么必须设计 DOM 结构来处理
greeting
可能
undefined
的事实,要么必须使用事件或
watch
函数自己等待它。
使用
$broadcast
的示例:
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))
}
});
$broadcast
文档:
https://vuejs.org/api/#vm-broadcast