【发布时间】:2016-01-19 19:19:57
【问题描述】:
在release notes for Vue 1.0.0-rc.1,我们被告知
“继承选项已被弃用。始终将数据传递给孩子 通过 props 组件。”
但是,组件 API 部分说
"$data 不能再用作道具。"
我一直在尝试将数据传递给我的根 Vue 实例的子组件,但没有任何运气。
在 0.12.* 版本中,如果您想要/需要访问父实例的数据、方法等,您只需添加...
inherit: true
...到子组件。
现在,在尝试通过 props 访问父数据时,我继续碰壁。这是一个简化的例子:
app.js:
new Vue({
el: '#app',
data: {
authorized: false,
currentView: 'welcome-view'
},
components: {
'welcome-view': require('./views/welcome')
}
});
views/welcome.js:
module.exports = {
props: ['authorized'],
template: require('./welcome.template.html')
};
views/welcome.template.html:
<div v-if="authorized"><p>You Are Logged In</p></div>
<div v-else>Please Log In</div>
主视图文件 (app.blade.php)
...
<body id="app">
<component :is="currentView"></component>
</body>
...
以这种方式根本无法识别“授权”道具。它可以在组件外部(在“app”id 内)正常工作,但不能在模板内工作。
目前,我可以在任何需要的地方使用 $root 访问我需要的数据。例如:
<div v-if="$root.authorized"><p>You Are Logged In</p></div>
但是,我的理解是,这是“糟糕的形式”,as the docs say:
虽然可以访问父链的任何实例,但您 应避免直接依赖子组件中的父数据,并且 更喜欢使用 props 显式传递数据。
那么,我需要知道的是...... 如何我可以明确地使用道具?我显然走错了路,因为如果我只是将它们列在“props:[]”数组中,它们对我的子组件不可用。我在这里想念什么?
归根结底,重构我当前的代码以替换“继承:true”并且仍然可以访问根实例数据和函数的最佳方式(标准和实践)是什么?对此的任何帮助/建议都将受到欢迎。提前致谢。
【问题讨论】:
标签: vue.js