我有两个组成部分:
- App.vue
- Sidekick.vue
在我的 App.vue
组件中,我有一个属性,我想从 Sidekick.vue
访问
App.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>
Sidekick.vue
<template>
<div class="sidekick">
{{ myData }}
</div>
</template>
<script>
export default {
name: 'Sidekick'
}
</script>
我想从 Sidekick.vue
访问 myData
(在 App.vue
中声明)
我尝试从 --- 中导入 App.vue
Sidekick.vue
通过执行以下操作:
Sidekick.vue (错误尝试)
<script>
import App from '@/App'
export default {
name: 'Sidekick',
data () {
return {
myData: App.myData
}
}
}
</script>
我已经阅读了有关道具的信息 - 但只看到了对子/父组件的引用。在我的例子中, Sidekick.vue
显示在 --- 的一个 div App.vue
(不确定这是否使它成为“孩子”)。我是否需要以某种方式授予 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.vue
当我们点击 /sidekick
原文由 bruh 发布,翻译遵循 CC BY-SA 4.0 许可协议
请记住,经验法则是使用 props 以单向流的方式传递数据
快速解决方案:
全局事件总线在您的
<App/>
和<Sidekick/>
组件之间发布消息。https://v2.vuejs.org/v2/guide/components.html#Non-Parent-Child-Communication
长期解决方案:
使用像 vuex 这样的状态管理库更好地将数据封装在一个地方(全局存储)并使用
import { mapState, mapMutations } from 'vuex'
从你的组件树订阅它