多层嵌套中的vue组件调用祖先组件的方法

2019-04-21  本文已影响0人  舒尔诚

组件之间多层传递属性是一个比较常见的业务场景。如:
A --> B --> C --> D
要实现 B,C、D都可以调用A中的方法

A组件

<template lang="pug">
<div style="border:1px solid #ccc;padding:10px">
<h2>组件A 数据项:{{myData}}</h2>

<B @changeMyData="changeMyData" ></B>
</div>
</template>
<script>
import B from "./B";
export default {
data() {
return {
myData: "100"
};
},
components: { B },
methods: {
changeMyData(val) {
this.myData = val;
}
}
};
</script>

B组件

<template>
<div style="border:1px solid #ccc;padding:10px">
<h3>组件B</h3>

<C v-bind="attrs" v-on="listeners"></C>
</div>
</template>
<script>
import C from "./C";
export default {
components: { C },
};
</script>

C组件

<template>
<div style="border:1px solid #ccc;padding:10px">
<h4>组件C</h4>

<D v-bind="attrs" v-on="listeners"></D>
</div>
</template>
<script>
import D from "./D";
export default {
components: { D }
};
</script>

D组件

<template>
<div style="border:1px solid #ccc;padding:10px">
<h5>组件D</h5>
<input v-model="myd" @input="hInput" />
<p>attr['myData'] ,此处要能娶到值,不能出现在props中 </p> </div> </template> <script> export default { props: { myData: { String } }, //使用props ,能接受祖先的值,但标签里使用attr['myData'] 则娶不到了
created() {
this.myd = this.myData; // 在组件A中传递过来的属性
console.info(this.attrs, this.listeners);
},
methods: {
hInput() {
this.$emit("changeMyData", this.myd); // // 调用组件A中传递过来的事件
}
}
};
</script>

在b c d中均可以使用 this.$emit("changeMyData", this.myd);来触发A中的方法changeMyData

上一篇下一篇

猜你喜欢

热点阅读