嵌套的插槽是什么意思?
- 如下图代码所示:
先是渲染了一个 Tabs 组件,黄色框里面是他的插槽内容,里面又有一个 Tab 组件,里面浅蓝色框里又是 Tab 组件的插槽内容。 - 所以我们需要写两个 slot 才能渲染这个内容
先写第一个插槽
- 来到 Tabs 组件
- 如果直接写
<slot />就没办法一个一个地获取子组件,会把所有内容直接显示出来,所以不能用。 - 以下代码,可以达到效果(用
component实现的插槽): - 改写成 v-for:
写第二个插槽
- 来到 Tab 组件
- 直接用
<slot />,因为他不需要检查 slot 内容,将所有内容显示出来即可:
- 成功渲染了内容,但是 title 还没有渲染(本该渲染在“内容1”和“内容2”顶部)
显示 title
- 先在 Tabs 里获取到这个 title
- 通过 console.log 找到 title 在 tag.props.title 上
(这里 tag 前面的
...是扩展操作符,意思是把 tag 展开打印出来)
- 把 title 存起来,用
map不用forEach,记得在 return 把 titles 导出
- 在页面显示
要注意,只要用到了
v-for就必须要写:key="x",而且 key 要有唯一性,重复了会报错,所以这里把index传进去,用:key="index",但是这样也会有 bug,这个以后再说。