Javascript Vue<;模板>;在遍历列表时,标记的行为不符合预期
我的app.js可以生成如下选项卡: 输入:Javascript Vue<;模板>;在遍历列表时,标记的行为不符合预期,javascript,vue.js,vuejs2,vue-component,Javascript,Vue.js,Vuejs2,Vue Component,我的app.js可以生成如下选项卡: 输入: <tabs> <div> <a slot="header">Tab 1</a> <article slot="content"> <h2>Tab 1 Content</h2> <p>Lorem ipsum dolor sit amet</p>
<tabs>
<div>
<a slot="header">Tab 1</a>
<article slot="content">
<h2>Tab 1 Content</h2>
<p>Lorem ipsum dolor sit amet</p>
</article>
</div>
<div>
<a slot="header">Tab 2</a>
<article slot="content">
<h2>Tab 2 Content</h2>
<p>Sed ut perspiciatis unde</p>
</article>
</div>
<div>
<a slot="header">Tab 3</a>
<article slot="content">
<h2>Tab 3 Content</h2>
<p>Neque porro quisquam est</p>
</article>
</div>
</tabs>
使用上述选项卡的输入,如何获得上面在渲染函数或Vue模板中指定的输出
如果我试图通过this.$slots.header
迭代slots,我将得到未定义
有人能帮我实现这一点吗?这是Vue中的基本循环。希望这有帮助
Vue.component('tabs'{
道具:['tabs'],
模板:`
-
{{item.title}
`
})
var app=新的Vue({
el:“#应用程序”,
数据(){
返回{
选项卡:[
{
标题:“表1”,
内容:“表1内容”
},
{
标题:“表2”,
内容:“表2内容”
},
{
标题:“表3”,
内容:“表3内容”
}
]
}
}
})
这是Vue中的基本循环。希望这有帮助
Vue.component('tabs'{
道具:['tabs'],
模板:`
-
{{item.title}
`
})
var app=新的Vue({
el:“#应用程序”,
数据(){
返回{
选项卡:[
{
标题:“表1”,
内容:“表1内容”
},
{
标题:“表2”,
内容:“表2内容”
},
{
标题:“表3”,
内容:“表3内容”
}
]
}
}
})
属性
$slots
包含直接子级插槽,因此嵌套命名插槽(如示例中所示)将被排除。在您的情况下,只有default
插槽,其中包含包装div
s(即选项卡)。在中,您必须手动处理选项卡的子项以获取内部插槽,以便生成您描述的HTML:
render(h) {
const tabs = this.$slots.default;
const headers = tabs && tabs.map(tab => tab.children.filter(x => x.data.attrs['slot'] === 'header'));
const bodies = tabs && tabs.map(tab => tab.children.filter(x => x.data.attrs['slot'] === 'content'));
if (!tabs || !bodies) {
return h('div', 'No tabs');
}
return h('section', [
h('nav', { class: 'tabs-nav' }, [
h('ul', { class: 'tabs-list' },
headers.map(header => h('li', { class: 'tabs-listitem' }, header)))
]),
h('div', { class: 'tabs-body' }, bodies)
]);
}
属性
$slots
包含直接子级的插槽,因此嵌套命名插槽(如示例中所示)将被排除。在您的情况下,只有default
插槽,其中包含包装div
s(即选项卡)。在中,您必须手动处理选项卡的子项以获取内部插槽,以便生成您描述的HTML:
render(h) {
const tabs = this.$slots.default;
const headers = tabs && tabs.map(tab => tab.children.filter(x => x.data.attrs['slot'] === 'header'));
const bodies = tabs && tabs.map(tab => tab.children.filter(x => x.data.attrs['slot'] === 'content'));
if (!tabs || !bodies) {
return h('div', 'No tabs');
}
return h('section', [
h('nav', { class: 'tabs-nav' }, [
h('ul', { class: 'tabs-list' },
headers.map(header => h('li', { class: 'tabs-listitem' }, header)))
]),
h('div', { class: 'tabs-body' }, bodies)
]);
}
您应该使用for循环并生成选项卡吗?是@DuongDang。我想用loop生成标签你找到解决方案了吗?没有。我找不到@DuongDang。我仍然在寻找帮助,我在下面发布了一个示例代码片段。希望这将有助于您使用for循环并生成选项卡?是@DuongDang。我想用loop生成标签你找到解决方案了吗?没有。我找不到@DuongDang。我仍然在寻找帮助,我在下面发布了一个示例代码片段。希望这会有所帮助