如開發一個組件,裏面一些子元素但願是有調用着來定義,能夠使用slotvue
<child>沒有插槽slot我不展現</child> Vue.component('child',{ template:`<div>child</div>` })
結果:git
註釋:在父組件中調用子組件時給子組件添加插槽內容,若是子組件裏不包含<slot></slot>元素,則添加的插槽內容會被拋棄github
<child1></child1> <child1>我是默認插槽</child1> <child1>{{parentMsg}}</child1> Vue.component('child1',{ template:`<div>child1<slot>哈哈哈哈</slot></div>` })
結果:spa
註釋:code
<child2> <template slot="aaa"> 我是aaa具名插槽 </template> <template slot="bbb"> 我是bbb具名插槽 </template> <!-- V2.6.0以後的寫法縮寫 --> <template #ccc> 我是ccc具名插槽 </template> </child2> Vue.component('child2',{ template:`<div>child2 <slot name='aaa'></slot> <slot name='bbb'></slot> <slot name='ccc'></slot> </div>` })
<child3> <!-- V2.6.0以前的寫法 --> <template slot-scope="scope"> {{scope}} </template> </child3> Vue.component('child3',{ template:`<div>child3 <slot :msg="msg" text="哈哈哈"></slot> </div>`, data(){ return{ msg:"子組件的參數" } } })
結果:component
<child4 > <!-- V2.6.0以後的寫法 --> <template v-slot="msg"> <li>{{msg.msg.name}}{{msg.msg.age}}歲</li> </template> </child4> Vue.component('child4',{ template:`<div>child4 <ul> <slot v-for="item in childMsg" :msg=item></slot> </ul> </div>`, data(){ return{ childMsg:[ { name:"張三", age:18 }, { name:"李四", age:19 } ] } } })
結果:
註釋:
做用域插槽與普通插槽區別:[做用域插槽]父組件插槽的內容能訪問子組件傳的數據[普通插槽]則不行blog
源碼地址: https://github.com/shangliaoy...作用域