美文网首页
多层嵌套中的vue组件调用祖先组件的方法

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

作者: 舒尔诚 | 来源:发表于2019-04-21 18:59 被阅读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

    相关文章

      网友评论

          本文标题:多层嵌套中的vue组件调用祖先组件的方法

          本文链接:https://www.haomeiwen.com/subject/bsijgqtx.html