gpt4 book ai didi

javascript - Vue 绑定(bind)到动态插槽元素?

转载 作者:搜寻专家 更新时间:2023-10-30 22:42:39 24 4
gpt4 key购买 nike

我想向组件传递一个插槽中的按钮,该按钮将有一个 Action 。例如一个表格,它具有“添加行”功能。

<my-table :data="data" :cols="cols"> 
<button slot="add_row"></button>
</my-table>

或者,这个反汇编的警报:

<alert>
<button slot="close">Remove the alert</button>
</alert>

具有以下模板:

<div class="alert alert-info">
<slot></slot>
</div>

问题是,我想在组件定义内部,将事件操作绑定(bind)到 <slot> ed 按钮,但仍然让组件用户提供自己的按钮(有时甚至是链接,<a> 元素)。

我考虑过为操作按钮使用一个指令,类似于这个库:
https://bootstrap-vue.js.org/docs/components/modal
模态按钮有一个 v-b-modal指示。但找不到如何做到这一点。

更新:我正在尝试使用指令来实现它。这是我到目前为止所拥有的: https://jsfiddle.net/uvd6knLh/

Vue.component('alert', {
template: `
<div class="alert alert-info" v-if="show">
<slot></slot>
</div>`,

data() {
return {
show: true
}
},
mounted() {
// directive event
this.$root.$on("alert:close", () => this.show = false);
}
});

Vue.directive('alert-dismiss', {
inserted: function(el, binding, vnode) {
el.addEventListener("click", () => {
vnode.context.$root.$emit("alert:close");
});
}
});

所以我监听指令事件。问题是指令事件将导致所有警报组件关闭,如您在 jsfiddle 中所见。如何使这种模式发挥作用?

最佳答案

要从子元素 (<my-table>) 向其父元素提供数据和操作,您可以查看 scoped slots .

当子组件具有一些与父组件无关的内部状态,或者为子组件提供自定义属性或回调并将标记和样式留给父组件时,Scoped slots 非常有效。

但是在您的情况下,因为它是拥有 data 属性的父级,所以我不确定这是最好的解决方案。 child 不应该改变它。

您可以简单地解决父组件上的事件。

关于javascript - Vue 绑定(bind)到动态插槽元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50788716/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com