插槽用大白话讲就是:在子组件中用slot标签占个位置,然后在父组件中,子组件标签里嵌套一个标签,然后执行的时候用嵌套的标签替代slot
子组件:组件MySon
定义了一个默认插槽,用slot
标签表示。当父组件使用MySon时,可以在其标签内放置任意内容,该内容将会替换掉slot标签。
1 <template> 2 <div class="my-son"> 3 <h3>{{ title }}</h3> 4 <slot></slot> 5 </div> 6 </template> 7 8 <script> 9 export default { 10 name: 'MySon', 11 props:[ 12 title: String, 13 ] 14 } 15 </script>
父组件:使用p标签去把子组件的slot标签替换掉,这就是最简单的默认插槽
1 <template> 2 <div> 3 <my-son title="Hello World"> 4 <p>This is the content of MySon component.</p> 5 </my-son> 6 </div> 7 </template> 8 9 <script> 10 import MyCard from './MySon.vue' 11 12 export default { 13 components: { MySon } 14 } 15 </script>
具名插槽
然后接下来就是比默认插槽复杂一点的具名插槽,顾名思义就是有名字的插槽,当我们写了多个插槽时就需要名字来区分了
子组件:这里看子组件就比默认插槽的slot多了一个name属性,而name属性的内容就是插槽的名子
<template> <div class="card"> <h3>{{ title }}</h3> <p>{{ description }}</p> <slot name="content"></slot> <slot name="footer"></slot> </div> </template> <script> export default { name: 'MyCard', props: { title: String, description: String } } </script>
父组件:相比较父组件就要复杂点,先看第4行代码,这里它用template标签包裹,而我们要知道在Vue中,template
标签本身不会被渲染到HTML页面中的。
然后就是v-slot可以理解是用来指定替代哪个插槽的,这里第四行v-slot:content,就是说要替代名字为content的插槽,而v-slot:是可以简写为#的
比如v-slot:content简写#content
这里有一个点要思考就是第8行的代码为什么执行的回调函数onClick,要写在父组件中,而不是写在子组件中的,我认为写在父组件中可以使得代码容易阅读,希望vue开发者也是这麽想的哈哈
有知道的可以提出来欢迎指正
1 <template> 2 <div> 3 <my-card title="Hello"> 4 <template v-slot:content> 5 <p>This is the content of MyCard component.</p> 6 </template> 7 <template v-slot:footer> 8 <button @click="onClick">Click me</button> 9 </template> 10 </my-card> 11 </div> 12 </template> 13 14 <script> 15 import MyCard from './MyCard.vue' 16 17 export default { 18 components: { MyCard }, 19 methods: { 20 onClick () { 21 console.log('Button clicked') 22 } 23 } 24 } 25 </script>
接下来就是作用域插槽,作用域插槽子组件向父组件传递数据的一种机制
子组件:
<template> <div> <h1>{{title}}</h1> <!-- 使用slot标签占位 --> <!-- slot标签内写属性可以给父组件传值 --> <slot name="test" :iii="abc"></slot> </div> </template> <script> export default { name:'Test', data () { return { title:'hello world', abc:12321 } } } </script>
父组件:
<template> <div> <Test> <!-- 使用='props' 这样props可以接收到子组件在插槽中传过来的值 这里props名字不是固定的,可以写成a,b,c都行--> <template #test="props" > <h2>{{props.iii}}</h2> </template> </Test> </div> </template> <script> import Test from './components/Test.vue'; export default { name:'App', components: { Test } }
以上就是vue中插槽的简单理解,欢迎各位大佬补充,万分感谢!!!
一起学习一起进步
标签:slot,vue,title,插槽,标签,组件 From: https://www.cnblogs.com/dingjishun/p/17327806.html