组件插槽
插槽也是组件传值的一种方式
组件的最大特性就是重用
,而用好插槽能大大提高组件的可重用能力。
通俗的来讲,插槽无非就是在子组件
中挖个坑,坑里面放什么东西由父组件
决定。
插槽类型有:
单个(匿名)插槽
匿名插槽一般就是使用单个插槽(因为单个插槽就一个,所以不需要指定具体的名字)
注意:子组件的slot
标签中允许书写内容,当父组件不往子组件传递内容时,slot
中的内容才会被展示出来。
<div id="app"> <child>{{msg}}</child> <data-li v-for='iteam in data'> {{iteam}} </data-li> </div> <script src="./js/vue.js"></script> <script> Vue.component("child", { template: `<div> 儿子挖了个坑,填什么由父亲决定,比如说<slot>1111</slot>。 </div>`, }); Vue.component("data-li",{ template: `<li>我是<slot>名字</slot>的父亲</li>`, }) new Vue({ el: "#app", data:{ data:['老马','老王','张三'], msg:"这是插槽", } }); </script>
具名插槽
slot
元素可以用一个特殊的特性 name
来进一步配置如何分发内容。多个插槽可以有不同的名字,具名插槽将匹配内容片段中有对应 slot
特性的元素(填坑的内容会根据名字去匹配slot)。
<div id="app"> <app-layout> <h2 slot="tou">我是头</h2> <p style="color: violet;">中新网12月14日电 (张奥林)美国总统大选日已过去月余,驴象之争下,拜登与特朗普到底谁赢了,至今尚无定论。</p> <p>虽然拜登本人及国际社会普遍认为拜登已胜选,但特朗普方面仍未承认败选。2020年12月14日,美国选举人团将进行投票,这或将使本次大选的结果“尘埃落定”。</p> <h2 slot="jiojio">我是jio</h2> </app-layout> </div> <script src="./js/vue.js"></script> <script> Vue.component('app-layout',{ template: ` <div> <header> <slot name="tou"></slot> </header> <main> <slot></slot> </main> <footer> <slot name="jiojio"></slot> </footer> </div> ` }) new Vue({ el: "#app" }) </script>
作用域插槽
应用场景:
父组件对子组件的内容进行加工处理(子传父)
作用域插槽是一种特殊类型的插槽,(子)作用域插槽会绑定了一套数据,父组件可以拿这些数据来用,于是,情况就变成了这样:
样式父组件说了算,但父组件中内容可以显示子组件插槽绑定的数据。
<div id="app"> <!-- b. 父传子 --> <child :username="username"> <div slot-scope="props"> <!-- f. 父亲接收到新的名字,调用自己的方法去处理数据 --> <button @click="modusername(props.newname)"> 修改用户名 </button> </div> </child> </div> <script src="./js/vue.js"></script> <script> Vue.component("child", { // c. 子接收 props: ["username"], data() { return { // d. 定义新的数据 newname: "zhangsan", }; }, // e. 将新名字传递给了父 template: `<div>用户名:{{username}}<slot :newname="newname"></slot></div>`, }); new Vue({ el: "#app", data: { // a. 初始用户名 username: "admin", }, methods: { // g. 父亲更新自己的数据 modusername: function (newname) { // h. 执行更新 this.username = newname; }, }, }); </script>
Comments | NOTHING