bes*_*art 7 vue.js bootstrap-vue
我试图在 bootstrap-vue 表中创建一个插槽,以使用自定义组件呈现任何布尔值。
所以我有一个简单的表
<b-table :items="items" :fields="columns" >
</b-table>
Run Code Online (Sandbox Code Playgroud)
现在,如果我想以特定方式呈现单个列,我必须使用插槽
<template v-slot:cell(active)="data" >
<my-component :item="data.item" />
</template>
Run Code Online (Sandbox Code Playgroud)
它有效,因为我知道这active是一个布尔值。
我想概括这种行为,但我不能v-for在模板中使用,v-slot:cell(active)如果不在模板上也不能使用......这个想法是创建一个包含我所有布尔字段的数组并对其进行迭代......但它不起作用......
像这样的东西
<template v-slot:cell(b)="data" v-for="b in booleanFields">
<my-component :item="data.item[b]" />
</template>
Run Code Online (Sandbox Code Playgroud)
acd*_*ior 17
因为 Vue 支持动态插槽名称,您可以使用变量来使用v-bind:[attributeName]="value" 语法设置插槽名称。
通过这种方式,您可以执行以下操作:
<template v-slot:['cell(' + b + ')']="data" v-for="b in booleanFields">
Run Code Online (Sandbox Code Playgroud)
但是由于动态参数表达式约束,无法使用引号。因此,您必须创建一个辅助方法来进行该连接。所以:
<template v-slot:[gomycell(b)]="data" v-for="b in booleanFields">
Run Code Online (Sandbox Code Playgroud)
加
methods: {
gomycell(key) {
return `cell(${key})`; // simple string interpolation
}
Run Code Online (Sandbox Code Playgroud)
自然,您可以将方法命名为gomycellascell并像使用它一样v-slot:[cell(b)]="data"(注意[]s),但我保留了名称gomycell,以便在此 texample 中更清楚该方法的名称是什么,什么不是。
这是一个展示动态插槽名称用法的小演示,它不是,b-table但我认为它足以表明它是可能的:
Vue.component('my-table', {
template: '#my-table',
})
new Vue({
el: '#app',
data: {
booleanFields: [true, false]
},
methods: {
gomycell(key) {
return `cell(${key})`;
}
}
})Run Code Online (Sandbox Code Playgroud)
<script src="https://unpkg.com/vue"></script>
<div id="app">
<my-table>
<template v-slot:[gomycell(b)]="data" v-for="b in booleanFields">
<h3>who? {{ data.is }}</h3>
</template>
</my-table>
</div>
<template id="my-table">
<div>
<div style="color:green"><slot name="cell(true)" v-bind="{is: 'true!'}"></slot></div>
<div style="color:red"><slot name="cell(false)" v-bind="{is: 'false!'}"></slot></div>
</div>
</template>Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6256 次 |
| 最近记录: |