我已经在自定义组件上输入了内容,当我单击包装器组件上的下一个按钮时,我需要向父组件发送详细信息。
这在vue中怎么可能?
wrapper.vue
<template>
<div :id="contentId" class="mt-3">
<div>
<slot></slot>
</div>
<b-row class="float-right">
<b-col>
<button cssClass="e-outline" v-on:click="btnNext">{{nextButtonText}}</button>
</b-col>
</b-row>
</div>
</template>
parent.vue
<template>
<div>
<Wrapper contentId="1">
<CustomComponent1 />
</wrapper>
<Wrapper contentId="2">
<CustomComponent1 />
</wrapper>
</div>
</template>
customComponent1.vue
<template>
<div>
<input v-model="name" />
<input v-model="name2" />
</div>
</template>
上面的代码仅用于说明目的。
答案 0 :(得分:2)
问题在于包装器没有天生就可以访问作用域组件的数据,因此必须手动创建这些链接。无法得知组件可能有多少个子代或插槽,因此这种功能并不是vue魔术的一部分。
因此,在示例中,您有一个父级App
组件,该组件包含一个插槽中有一个Wrapper
组件的MyInput
。
MyInout
组件不会自动更新其他组件,因此需要将其设置为$emit
内部数据。
这可以通过使用watch
,@change
侦听器进行输入来完成,也可以通过其他方式完成。您可以在变化时发出多个基准,或者对所有数据使用单个有效载荷
this.$emit("input", myData);
App
需要在MyInout
和Wrapper
之间显式连接数据
<Wrapper> <MyInput @input="onInput" slot-scope="{ onInput }" /> </Wrapper>
魔术/技巧在这里发生,在这里我们使用slot-scope将输入的input
发射函数绑定到onInput
函数。
然后,包装器需要监听从App
传递(通过Wrapper
的事件)
<slot :onInput="onInput" />
其中onInput
是一种可以处理数据的方法
我建议阅读以下内容