我有两个部分:
- App.vue
- Sidekick.vue
在我的App.vue
组件中,我有一个要从Sidekick.vue
访问的属性
- 应用程序版本**
<template>
<div id="app">
<p>{{ myData }}</p>
<div class="sidebar">
<router-view/> // our sidekick component is shown here
</div>
</div>
</template>
<script>
export default {
name: 'App',
data () {
return {
myData: 'is just this string'
}
}
}
</script>
- 小跟班,你好**
<template>
<div class="sidekick">
{{ myData }}
</div>
</template>
<script>
export default {
name: 'Sidekick'
}
</script>
我希望从Sidekick.vue
访问myData
(在App.vue
中声明)
我尝试过从Sidekick.vue
中导入App.vue
,方法如下:
- Sidekick. vue***(错误尝试)*
<script>
import App from '@/App'
export default {
name: 'Sidekick',
data () {
return {
myData: App.myData
}
}
}
</script>
我读过props-但是只看到子/父组件的引用。在我的例子中,Sidekick.vue
显示在App.vue
内的div中(不确定这是否使它成为"子")。我需要以某种方式将myData
的访问权限授予<router-view/>
吗?
- 更新:(显示App. vue和Sidekick. vue之间的关系**
- index. js***(路由器文件)*
import Vue from 'vue'
import Router from 'vue-router'
import Sidekick from '@/components/Sidekick',
import FakeComponent from '@/components/FakeComponent'
Vue.use(Router)
const router = new Router({
routes: [
{
path: '/',
redirect: '/fakecomponent'
},
{
path: '/sidekick',
name: 'Sidekick',
component: Sidekick
},
{
path: '/fakecomponent',
name: 'FakeComponent',
component: FakeComponent
}
]
})
export default router
当我们点击/sidekick
时,Sidekick.vue
会被渲染
4条答案
按热度按时间nkcskrwz1#
请记住,经验法则是使用 prop 在单向流中传递数据
prop 放下,活动开始。
https://v2.vuejs.org/v2/guide/components.html#Composing-Components
快速解决方案:
在
<App/>
和<Sidekick/>
组件之间发布消息的全局事件总线。https://v2.vuejs.org/v2/guide/components.html#Non-Parent-Child-Communication
长期解决方案:
使用vuex这样的状态管理库可以更好地将数据封装在一个位置(全局存储),并使用
import { mapState, mapMutations } from 'vuex'
从组件树中订阅数据kt06eoxx2#
当您进行亲子交流时,最好和推荐的选择是使用 prop 和事件。
当希望在多个组件之间共享状态时,最好和推荐的方法是使用Vuex。
如果你想使用简单的数据共享,你可以使用Vue observable。
**简单的例子:**假设您有一个游戏,您希望错误可以被许多组件访问。(组件可以访问它并操作它)。
错误.js
组件1.vue
在
Component1
中,errors.count
是React性的,所以如果作为模板,你有:单击 Increase(增加)按钮时,您将看到错误增加。
正如您所料,当您在另一个组件中导入
errors.js
时,两个组件都可以参与操作errors.count
。**注意:**即使您可能使用Vue.observable API进行简单的数据共享,您也应该知道这是一个非常强大的API。例如,请阅读Using Vue Observables as a State Store
nfg76nw03#
ckx4rj1h4#
如果应用程序js(父级)和Sidekick(子级)
应用程序js
在模板中
在脚本中,从.“/Sidekick.vue导入Sidekick:
助手.vue
属性:[“我的数据”]
现在你可以在sidekick的任何地方访问myData。在模板myData和脚本this.myData中