1.什么是插槽?

插槽就是子组件中的提供给父组件使用的一个占位符,用<slot></slot> 表示,

父组件可以在这个占位符中填充任何模板代码,如 HTML、组件等,填充的内容会替换子组件的<slot></slot>标签

2.其作用?

感觉是为了使插入更加灵活,用于实现一些特定的功能.

3.props是什么?

也就是props是子组件访问父组件数据的唯一接口。

详细一点解释就是:

组件实例的作用域是孤立的。这意味着不能 (也不应该) 在子组件的模板内直接引用父组件的数据。

父组件的数据需要通过 prop 才能下发到子组件中。

一个组件可以直接在模板里面渲染data里面的数据(双大括号)。

子组件不能直接在模板里面渲染父元素的数据。

如果子组件想要引用父元素的数据,那么就在prop里面声明一个变量(比如a),这个变量就可以引用父元素的数据。

然后在模板里渲染这个变量(前面的a),这时候渲染出来的就是父元素里面的数据。

 

我把他理解为父子间的接口

 

上代码

<!DOCTYPE html>

<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<!--view层,模板--> <div id="vue"> <todo> //插槽绑定todo-titile, ":"冒号后面的是props的title ,这个是数据detitle;就能实现动态绑定然后输出"秦老师系列课程",这真是太麻烦了 <todo-title slot="todo-title" :title="title"></todo-title>
<!--<todo-items slot="todo-items" v-for="{item,index} in todoItems" v-bind:item="item"></todo-items>--> <!--如下为简写--> <todo-items slot="todo-items" v-for="item in todoItems" :item="item"></todo-items </todo> </div>

<!--1.导入Vue.js-->
<script src="https://cdn.jsdelivr.net/npm/vue@2.5.21/dist/vue.min.js"></script> <script type="text/javascript"> Vue.component('todo',{            //定义组件 template:'<div>\ <slot name="todo-title"></slot>\ <ul>\ <slot name="todo-items"></slot>\ </ul>\ </div>' });

Vue.component(
'todo-title',{ props:['title'],      //接口为title template:'<div>{{title}}</div>' });

//这里的index,就是数组的下标,使用for循环遍历的时候,可以循环出来!

  Vue.component("todo-items",{ props:["item","index"],   //接口为item,index template:"<li>{{index+1}},{{item}}</li>" });
var vm = new Vue({ el:"#vue", data:{ title:"秦老师系列课程", todoItems:['test1','test2','test3']    //返回数据 } }); </script> </body> </html>