首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Vuejs从孙子到基本父母

Vuejs从孙子到基本父母
EN

Stack Overflow用户
提问于 2019-07-24 17:42:31
回答 2查看 2.6K关注 0票数 2

如果在嵌套组件3-4级别中有组件,并且:

(1)希望将数据从基本父组件发送到我必须从每个家长发送到每个子支持的最后一个子组件--这很好,但是

(2)如果我想从最后一个子组件中接收基本父组件中的数据,那么我必须向每个子组件发出数据,并得到我在int的父组件中给出的数据,直到它到达基本组件--这不是很酷。

这就是它的工作原理?

代码语言:javascript
复制
<component1 @change="change">
    <component2 :data="data" @change="change">
        <component3 :data="data" @change="change">
            <component4 :data="data">
            </compoent4>
        </compoent3>
    </compoent2>
</compoent1>

在每个子组件中,我将包括:

代码语言:javascript
复制
props: {data: {type: String}},
methods: {
    change: function () {
        this.$emit('change', this.data)
    }
}

在基本父组件中,我将有:

代码语言:javascript
复制
data() {
    data: 1
    }
},
methods: {
    change: function () {
        this.$emit('change', this.data)
    }
}

还是最好是用vuex?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-07-24 17:50:23

在Vue中克服这个问题的正确方法是使用EventBus。

创建一个新文件,并将其命名为eventBus.js,并将以下内容放入其中

代码语言:javascript
复制
import Vue from 'vue'
export default new Vue()

然后,在要从其中进行通信的文件上,导入该文件并将其用作

发送事件:

代码语言:javascript
复制
import EventBus from '../eventBus' 
EventBus.$emit('MESSAGE_NAME', payload)

接收事件:

代码语言:javascript
复制
  import EventBus from '../eventBus' 
  EventBus.$on('DATA_PUBLISHED', (payload) => {
      this.updateData(payload)
   })
票数 3
EN

Stack Overflow用户

发布于 2019-07-24 23:09:12

Vuex或事件总线可能会过度使用,它会破坏您自上而下的组件体系结构。

如果您确实需要单向数据流(带有触发器并传递结果):

您可以使用react:将变更函数向下传递为一个支柱(它可以通过闭包访问父数据),只需在子函数中调用它。您甚至可以使用“提供/注入”。

代码语言:javascript
复制
<component1 :change="change">
    <component2 :data="data" :change="change">
        <component3 :data="data" :change="change">
            <component4 :data="data" :change="change">
            </compoent4>
        </compoent3>
    </compoent2>
</compoent1>

组件1

代码语言:javascript
复制
props: {data: {type: String}},
methods: {
    change: function () {
        this.$emit('change', this.data)
    }
}

组件4

代码语言:javascript
复制
props: {data: {type: String}, change: Function},
methods: {
    // no methods required! just call: this.change();
}

如果你真的只想要一个深的双向绑定:

您可以通过将包含数据的对象传递到(甚至可以使用提供/注入来跳过层),而不是将数据作为字符串支柱传递。然后,您不需要一个更改函数,您可以直接操作数据。与往常一样,您可以使用provide/inject跳过层。

代码语言:javascript
复制
<component1 :data="data">
    <component2 :obj="obj">
        <component3 :obj="obj" >
            <component4 :obj="obj">
            </compoent4>
        </compoent3>
    </compoent2>
</compoent1>

组件1

代码语言:javascript
复制
props: {data: {type: String}},
computed: {
    obj: function () {
        return {data: this.data};
    }
}

组件4

代码语言:javascript
复制
props: {obj: {type: Object}},
methods: {
    change: function (newValue) {
        this.obj.data = newValue;
    }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57188525

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档