我有自定义组件的输入,当我单击包装器组件上的下一个按钮时,我需要向父组件发送详细信息。
这在 vue 中怎么可能?
包装器.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>
Run Code Online (Sandbox Code Playgroud)
父.vue
<template>
<div>
<Wrapper contentId="1">
<CustomComponent1 />
</wrapper>
<Wrapper contentId="2">
<CustomComponent1 />
</wrapper>
</div>
</template>
Run Code Online (Sandbox Code Playgroud)
customComponent1.vue
<template>
<div>
<input v-model="name" />
<input v-model="name2" />
</div>
</template>
Run Code Online (Sandbox Code Playgroud)
上面的代码是为了说明目的。
问题是包装器天生就不能访问作用域组件的数据,因此必须手动创建这些链接。没有办法知道组件可能有多少个孩子或插槽,所以这种功能不是 vue 魔法的一部分。
因此,在您有父App组件的示例中,它包含一个在插槽Wrapper中具有MyInput组件的组件...
该MyInout组件不会自动更新其他组件,因此需要设置为$emit内部数据。
这可以使用watch,@change侦听器作为输入或其他方式来完成。您可以在数据更改时发出多个数据,或者对所有数据使用单个有效负载
this.$emit("input", myData);
Run Code Online (Sandbox Code Playgroud)
在App明确需要连接数据之间MyInout和Wrapper
<Wrapper> <MyInput @input="onInput" slot-scope="{ onInput }" /> </Wrapper>
Run Code Online (Sandbox Code Playgroud)
魔术/技巧发生在这里,我们使用 slot-scopeinput将输入的发射函数绑定到onInput函数。
然后包装器需要侦听App从(通过)传递的事件Wrapper
<slot :onInput="onInput" />
Run Code Online (Sandbox Code Playgroud)
哪里onInput是处理数据的方法
我会推荐以下阅读
| 归档时间: |
|
| 查看次数: |
2980 次 |
| 最近记录: |