Vue 測試版本:Vue.js v2.5.13
Vue 文檔:
<slot>元素可以用一個特殊的特性name來進一步配置如何分發內容。多個插槽可以有不同的名字。具名插槽將匹配內容片段中有對應slot特性的元素。仍然可以有一個匿名插槽,它是默認插槽,作為找不到匹配的內容片段的備用插槽。
具體應用的時候:
1、匿名插槽的合並行為:
<div id="app"> <myele> <div> default slot </div> <div> <div>from parent!</div> <div>from parent!</div> </div> </myele> </div>
window.onload = function() { Vue.component('myele', { template: ` <div> <slot></slot> </div> ` }); new Vue({ el: '#app' }); };
效果:內容合並
2、匿名作用域插槽的覆蓋行為:
<div id="app"> <myele> <div slot-scope="props"> <div>from parent!</div> <div>from {{props.text}}</div> </div> <div slot-scope="prop"> <div>from </div> <div>{{prop.text}}</div> </div> </myele> </div>
window.onload = function() { Vue.component('myele', { template: ` <div> <slot text="child"></slot> <slot text="child2"></slot>//即使 text 和上一行一樣,也不會報錯,開發環境
</div> ` }); new Vue({ el: '#app' }); };
效果:以靠后的作用域插槽模板為准,繪制了兩遍;
3、匿名插槽模板和作用域插槽模板混合:
<div id="app"> <myele> <div> default slot </div> <div slot-scope="props"> <div>from parent!</div> <div>from {{props.text}}</div> </div> </myele> </div>
window.onload = function() { Vue.component('myele', { template: ` <div> <slot></slot> <slot text="child"></slot> </div> ` }); new Vue({ el: '#app' }); };
效果:匿名插槽以匿名作用域插槽模板為准進行渲染,即使你把匿名插槽模板放后面,也是一樣的結果;
由此可以看出,最好不要使用匿名、默認插槽,最好使用具名插槽,可以減少不確定性;
參考文檔:



