vue slot与传参实例代码讲解
插槽分为默认插槽和具名插槽:
默认插槽:
XML/HTML Code复制内容到剪贴板
- //父组件
- <div>
- <h3>父组件</h3>
- <testChild>
- <div>默认插槽</div>
- </testChild>
- </div>
- //子组件
- <div>
- <h4>子组件</h4>
- <slot></slot>
- </div>
具名插槽:
注意:具名插槽需要包裹在 template 标签中,否则会报错
XML/HTML Code复制内容到剪贴板
- //父组件
- <div>
- <h3>父组件</h3>
- <testChild>
- <template v-slot:test>//v-slot: + 插槽名
- <ul>
- <li v-for="item in list">{{item.name}}</li>
- </ul>
- </template>
- </testChild>
- </div>
- //子组件
- <div>
- <h4>子组件</h4>
- <slot name="test"></slot> //name="插槽名"
- </div>
子组件向父组件传参:
JavaScript Code复制内容到剪贴板
- //父组件
- <div>
- <h3>父组件</h3>
- <testChild>
- <template v-slot:test="data">//具名插槽,v-slot: +插槽名+ ="自定义数据名",子组件所传参数都是其属性
- <ul>
- <li v-for="item in data.list2">{{item.name}}</li>
- </ul>
- </template>
- <template v-slot="dataDefalut">//默认插槽
- {{dataDefalut.sName}}
- </template>
- </testChild>
- </div>
- //子组件
- <template>
- <div>
- <h4>子组件</h4>
- <slot name="test" :list2="list2"></slot>
- <slot :sName="name"></slot>
- </div>
- </template>
- <script>
- export default {
- name: "testChild",
- data(){
- return {
- list2:[
- {name:'ccc'},
- {name:'ddd'}
- ],
- name:'name'
- }
- }
- }
- </script>
补充:vue 利用slot向父组件传值
闲话不多说,上代码
子组件,里面有slot插槽,并在slot上绑定了text值
JavaScript Code复制内容到剪贴板
- <template>
- <div @click="$emit('change',checked+1)">
- <slot name="icon" :text="text"></slot>
- </div>
- </template>
- <script>
- export default{
- data(){
- return {
- text:"我是子组件"
- }
- },
- props:["checked"],
- model:{
- prop: 'checked',
- event: 'change'
- }
- }
- </script>
父组件通过slot-scope就可以拿到子组件slot上绑定的值,并且2.5.0版本可以用于任意元素上
XML/HTML Code复制内容到剪贴板
- <template>
- <div id="app">
- <img src="./assets/logo.png">
- <!--<router-view/>-->
- <car v-model="index">
- <div slot="icon" slot-scope="props">
- {{props.text}}
- </div>
- </car>
- </div>
- </template>