目录
插槽(Slot)是 vue 为组件的封装者提供的能力。允许开发者在封装组件时,把不确定的、希望由用户指定的部分定义为插槽。可以把插槽认为是组件封装期间,为用户预留的内容的占位符。

- <body>
- <div id="app">
- <cpn>
- <h2 style="color: red;">我们在学习插槽h2>
- cpn>
- div>
-
- <template id="cpn">
- <div class="cpn">
- <h2>{{msg}}h2>
-
- <script src="js/v2.6.10/vue.js" type="text/javascript" charset="utf-8">script>
- head>
- <body>
- <div id="app">
- <cpn>
- <span>111222333span>
- <span slot="left">这是左边具名插槽span>
- <span slot="center">这是中间具名插槽span>
- <span slot="right">这是右边具名插槽span>
-
- cpn>
- div>
- <template id="cpn">
- <div class="cpn">
- <h2>{{msg}}h2>
-
- <slot name="center">slot>
- <slot name="left">slot>
- <slot name="right">slot>
- <slot>没有具名的插槽slot>
- div>
- template>
- <script>
- const cpn = {
- template: '#cpn',
- data() {
- return {
- msg: '我们晚上也在上课 很努力'
- }
- }
- }
- const vm = new Vue({
- el: '#app',
- data() {
- return {}
- },
- components: {
- cpn
- }
- })
- script>
- body>
- html>

文字的内容位置,是根据插槽的位置决定的,插槽就相当于电脑里的usb接口,在父组件中去接收就相当于优盘插入插槽,一一对应。
组件内变量绑定在slot上, 然后使用组件v-slot:插槽名字="变量" ,变量上就会绑定slot传递的属性和值
什么时候用到作用域插槽?父组件中如果想使用子组件中的数据进行自定义内容的渲染
-
-
-
-
(父组件app)
- <template>
- <div id="app">
-
- <my-header>
- <template #default='list'>
-
- <ul>
- <li v-for="(item,index) in list.moves" :key="index">{{item}}li>
- ul>
- template>
- my-header>
-
- <my-header>
- <template slot-scope="list">
-
- <ol>
- <li v-for="(item,index) in list.moves" :key="index">{{item}}li>
- ol>
- template>
- my-header>
-
- <my-header>
- <template v-slot:default="list">
- <h3 v-for="(item,index) in list.moves" :key="index">{{item}}h3>
- template>
- my-header>
-
-
-
-
-
- div>
- template>
-
- <script>
- import MyHeader from "./components/MyHeader.vue";
-
- export default {
- name: "App",
-
- components: {
- MyHeader,
- },
- };
- script>
-
- <style>
- #app {
- font-family: Avenir, Helvetica, Arial, sans-serif;
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
- text-align: center;
- color: #2c3e50;
- margin-top: 60px;
- display: flex;
- justify-content: space-around;
- }
-
- style>
(子组件中)
- <template>
- <div class="header">
- <h2>{{msg}}h2>
-
- <slot :moves='moves'>我是默认内容slot>
-
- div>
- template>
- <script>
- export default {
- name: "MyHeader",
- data() {
- return {
- moves: [
- '金榜','热榜','人气榜'
- ],
- msg:'歌曲排行'
- };
- },
- };
- script>
- <style scoped>
- div {
- color: red;
- }
- .header{background-color: bisque;
- width: 200px;
- height: 300px;
- text-align: center;}
- style>
效果:(使用相同的数据,不同的结构类型,通过作用域插槽实现父子组件通讯,父组件使用子组件数据,对子组件进行修改)