Vue组件之--slot内容分发
2018-03-20 18:12
711 查看
以前,Vue组件总是一个个的空标签的形式出现的,那么如果说组件标签里面有内容,那么要获取这些内容要怎么办呢?
Vue提供了一个解决方案:slot内容分发,其作用就是用来获取组件中的原内容(就是组件标签内部的内容)。
用法分为两种情况:当组件内的原内容结构比较简单的时候可以使用单一slot,当原内容结构比较复杂的时候使用具名slot;
单一slot:在组件模板合适的位置插入slot组件即可;
具名slot:给你想获取的原内容部分指定一个属性`slot = "值"`,然后在在组件的模板中的合适位置插入一个slot元素,设定`name= "值"`即可。例如:
作用域插槽slot:
首先要将子组件的数据传递给子组件模板中的slot插槽(v-bind绑定属性):
作用域插槽更典型的用例是在列表组件中,允许使用者自定义如何渲染列表的每一项:
然后再在分析结果的基础上将原内容加上,再进行分析,最后得出结果
Vue提供了一个解决方案:slot内容分发,其作用就是用来获取组件中的原内容(就是组件标签内部的内容)。
用法分为两种情况:当组件内的原内容结构比较简单的时候可以使用单一slot,当原内容结构比较复杂的时候使用具名slot;
单一slot:在组件模板合适的位置插入slot组件即可;
<div id="container" v-cloak> <my-compo>你好,2018!</my-compo> <!-- 在这里组件的原内容是:你好,2018 ,比较简单--> </div> <!-- 在组件模板中获原内容 --> <template id="myCompon"> <div class="content"> <h3>{{house.price}}</h3> <slot>没有原内容</slot> <!-- 当没有原内容的时候就会显示“没有原内容”,有的话就会被替换成原内容 --> </div> </template>
具名slot:给你想获取的原内容部分指定一个属性`slot = "值"`,然后在在组件的模板中的合适位置插入一个slot元素,设定`name= "值"`即可。例如:
<div id="container" v-cloak> <my-compon1> <div slot = "smile"> <i>哈哈</i> </div> <ul slot="list"> <li>111</li> <li>222</li> <li>333</li> </ul> </my-compon1> <!-- 原内容结构比较复杂 --> <!-- 获取原内容中你想要的那一部分 --> </div> <!-- 获取你想要的那一部分 --> <template id="myCompon1"> <div> <slot name="smile"></slot> <!-- 这个时候,在组件内部含有属性slot="smile"的元素包裹的原内容就会被显示到这里 --> 4000 <h4>{{clothes}}</h4> <!-- 同上 --> <slot name="list"></slot> </div> </template>
作用域插槽slot:
首先要将子组件的数据传递给子组件模板中的slot插槽(v-bind绑定属性):
<!-- 子组件模板 --> <template id="sonTemplate"> <div class="son-class"> <slot v-bind:heheda="computer.price" v-bind:materials="computer.material"></slot> </div> </template>然后在父组件模板中具有特殊特性 slot-scope的 <template> 元素必须存在,表示它是作用域插槽的模板(也就是说被<template slot-scope></template>元素包围内容就是slot的模板,在渲染的时候slot就会被渲染成该模板内容),slot-scope的值将被当作一个临时的变量名,此变量用来接收从子组件传递过来的props对象(就是一个数据对象);
<!-- 父组件模板 --> <template id="compo"> <div> <h3>{{greeting}}</h3> <my-app-son> <!-- 这里 <template slot-scope = "props">就是slot插槽的模板,也就是说在渲染的时候slot会被渲染成该模板包裹着的内容--> <template slot-scope = "props"> <!-- 这里的props就是一个包含有属性heheda和materials的对象 --> <h3>{{greeting}}</h3> <h4>{{props.heheda}}</h4> <h4>{{props.materials}}</h4> </template> </my-app-son> </div> </template>在 2.5.0+,slot-scope 能被用在任意元素或组件中而不再局限于
<template>了
作用域插槽更典型的用例是在列表组件中,允许使用者自定义如何渲染列表的每一项:
<!-- <my-awesome-list>是一个子组件,子组件绑定的属性items,数据是来源于父组件 --> <my-awesome-list :items="items"> <!-- 作用域插槽也可以是具名的 --> <li slot="item" slot-scope="props" class="my-fancy-item"> {{ props.text }} </li> </my-awesome-list>列表组件的模板:
<ul> <!--子组件模板, 这里的items应该是通过父子通信获得的 --> <slot name="item" v-for="item in items" :text="item.text"></slot> </ul>注意:在分析组件+slot具体出来的内容是什么的时候,可以先将组件内部的原内容给剥离出来,在此基础上进行分析在没有原内容的时候组件将会是什么样子,
然后再在分析结果的基础上将原内容加上,再进行分析,最后得出结果
相关文章推荐
- vue之组件 slot内容分发
- 三、Vue(组件、组件间数据传递、slot内容分发、vue-router路由、单文件组件、vue-cli脚手架 )
- Vuejs组件之slot内容分发实例详解
- vue组件——slot分发内容
- 常用js框架之vue.js(深入四:组件2,slot内容分发,编译作用域,动态切换组件)
- vue组件详解(四)——使用slot分发内容
- Vuejs——(11)组件——slot内容分发
- vue组件详解之使用slot分发内容
- Vuejs组件——slot内容分发
- 使用Vue的slot插槽分发父组件内容实现高度复用、更加灵活的组件
- Vuejs组件——slot内容分发
- 使用Vue的slot插槽分发父组件内容实现高度复用、更加灵活的组件(推荐)
- Vuejs——(11)组件——slot内容分发
- Vue 2.0学习笔记:Vue组件内容分发(slot)
- vue内容分发与非vuex式组件通信
- Vue中的slot使用插槽分发内容的方法
- vue使用插槽分发内容slot的用法
- Vue内容分发slot(全面解析)
- Vue.js-----轻量高效的MVVM框架(使用slot分发内容)
- vue之slot内容分发