1、插槽可以干什么?
使用插槽可以动态的预留内容
2、插槽有哪些?
默认插槽、具名插槽、作用域插槽;
3、如何使用?
以下是关键代码
默认插槽: <slot></slot>
具名插槽:<slot name="xxx"></slot>
作用域插槽:<template slot-scope="slotProps">
4、 具名插槽的使用:
实现步骤:首先创建一个子组件 /views/demo/soltcomponent.vue 在父组件中根据这个路径导入进来import basecomponent from '@/views/demo/soltcomponent.vue';
在父注册组件: components: { basecomponent } 使用组件:<basecomponent> </basecomponent>;通过 slot="header" 为这个header的插槽 添加内容;
具名插槽的方式,使用第二种更加方便
<template> <div> <header> <slot name="header"></slot> </header> <main> <slot></slot> </main> <footer> <slot name="footer"></slot> </footer> </div> </template> <script> export default { data() { return { num:0 } }, } </script>
<template> <div id="createCard"> <!-- 具名插槽第一中方式 这种标签的方式只能写一个元素 --> <div style="float:left;border:10px; width:200px;"> <basecomponent> <h1 slot="header">标题内容</h1> <p>内容一</p> <p>内容二</p> <p>内容三</p> <h2 slot="footer">我是底部</h2> </basecomponent> </div> <!-- 具名插槽第二中方式 可以写多个元素 --> <div style="float:right;border:1px;width:300px;"> <p>具名插槽二</p> <basecomponent> <template slot="header"> <p>header1</p> <p>header2</p> </template> <p>内容一</p> <p>内容二</p> <template slot="footer"> <p>footer1</p> <p>footer2</p> </template> </basecomponent> </div> </div> </template> <script> import basecomponent from '@/views/demo/soltcomponent.vue'; export default { name: "actionCreate", components: { basecomponent, }, data() { return { list:[{ id:1, name:'苹果' },{ id:2, name:'橙子' },{ id:3, name:'香蕉' } ], test: true, message:'自定义组件显示', context:'这是很长很长一段话', number:0, }; }, methods:{ createTable(){ }, clickMy(numbers){ this.number+=numbers; //alert(this.number++); } } }; </script> <style> .current{ color: aquamarine; } </style>
5、作用域插槽
<template> <div> <li :key="item.id" v-for="item in list"> <slot :info="item">{{item.name}}</slot> </li> </div> </template> <script> export default { props:['list'], data() { return { } } } </script>
<template> <div> <!-- 作用域插槽 slot-scope获取子组件的内容--> <soltScope :list="list"> <template slot-scope="slotProps"> <strong v-if="slotProps.info.id==2" class="current">{{slotProps.info.name}}</strong> <span v-else>{{slotProps.info.name}}</span> </template> </soltScope> </div> </template> <script> import soltScope from '@/views/demo/soltScope.vue'; export default { name: "actionCreate", components: { soltScope, }, data() { return { list:[{ id:1, name:'苹果' },{ id:2, name:'橙子' },{ id:3, name:'香蕉' } ], test: true, message:'自定义组件显示', context:'这是很长很长一段话', number:0, }; }, methods:{ createTable(){ }, clickMy(numbers){ this.number+=numbers; //alert(this.number++); } } }; </script> <style> .current{ color: aquamarine; } </style>