我有两个组件:组件A
和组件B
。 A.vue
就像:
export default {
name: 'A',
data () {
var: true
}
}
B.vue
是:
import A from './A'
export default {
name: 'B',
components: {
A
}
}
我想在组件B
中使用组件A
的变量var
的动态值。因此我设置了一个观察者:
import A from './A'
export default {
name: 'B',
watch: {
A.data().var: func () {
console.log('Value of var changed in A.')
}
}
components: {
A
}
}
但是,这种方法行不通。组件 A
和 B
没有子父关系,因此,我无法使用 props。我怎样才能做到这一点?
最佳答案
假设两个实例 A
和B
位于同一根实例中,您可以使用该根作为两个组件之间通信的事件中心。
第 1 步 | 调用 handleAVarChange
的根模板需要时:
const rootTemplate = `
<div class="root">
<A @var-change="handleAVarChange"></A>
<B v-bind:AVar="AVar"></B>
</div>
`;
第 2 步 | 实现 rootTemplate
的 Vue 根脚本:
const root = new Vue({
template: rootTemplate,
data() {
return { AVar: null };
},
methods: {
handleAVarChange(value) {
this.AVar = value;
}
}
});
-
template
:模板均包含A
和B
-
data
返回一个具有属性AVar
的对象,我们将用它来存储A
上的源变量. -
methods.handleAVarChange
可用作root.template
内的事件处理程序.
第 3 步 | $emit
名为 'var-change'
的事件使用 A
中的新值:
export default {
name: 'A',
data () {
return {
Var: true,
}
},
methods: {
onSomeEvent(varValue) {
this.$emit('var-change', varValue);
// or maybe...
this.$emit('var-change', this.Var);
},
},
}
第 4 步 | 确保 AVar
设置为prop
B
内:
export default {
name: 'B',
props: ['AVar'],
// ...
}
关于javascript - 在 Vue JS 中的不同组件中为数据变量设置观察者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48135643/