当前位置:   article > 正文

组件化开发中的常用的插槽(slot)元素_控制slot元素

控制slot元素

详细请阅读官方文档——插槽官方文档

1. 什么是插槽

  插槽就是子组件中的提供给父组件使用的一个占位符,用<slot></slot> 表示,父组件可以在这个占位符中填充任何模板代码,如 HTML、组件等,填充的内容会替换子组件的<slot></slot>标签。

2. 插槽的使用方法

  举个例子,下面是京东app的两个界面,注意他的导航栏。

         

两个导航栏整体是几乎相同的,只有文本和一些按钮不同。我们都知道程序员不可能写两个导航栏吧,因为懒!哈哈,开个玩笑,那么这其实就是使用同一个导航栏组件,通过插槽元素实现不同的导航栏效果。

 1. 基础slot示例代码:

比如,一个弹出框组件,它有三处应用,需要更改按钮处的元素。

  1. <template id="cpn">
  2. <div>
  3. <h2>我是子组件</h2>
  4. <slot><button>按钮</button></slot>
  5. </div>
  6. </template>
  1. <div id="app">
  2. <cpn></cpn>
  3. <cpn><span>不是按钮</span></cpn>
  4. <cpn><input type="text"></cpn>
  5. <cpn><h2>吃饭</h2></cpn>
  6. </div>

运行结果 

2. 具名插槽使用方法:

 顾名思义,有名字的插槽就是具名插槽,就是我之前说的导航栏。

简单示例如下:

我有一个导航栏组件,分别把它左中右处的插槽起个name:

  1. <template id="cpn">
  2. <div>
  3. <slot name="left"><span></span></slot>
  4. <slot name="center"><span></span></slot>
  5. <slot name="right"><span></span></slot>
  6. </div>
  7. </template>

调用组件,修改指定位置的元素:

  1. <div id="app">
  2. <cpn></cpn>
  3. <cpn><span slot="center">中被修改</span></cpn>
  4. <cpn><button slot="left">左被修改</button></cpn>
  5. </div>

运行结果如下:

3.作用域插槽

理解:父组件替换插槽的标签,但是标签内容是由子组件提供的。

举个例子:子组件包括一组数据:比如,pColor:['red','green','yellow','black']; 我们要在以不同的方式显示这组数据(比如,行显示或列显示)。

通过父组件修改标签,内容还在子组件。

这就需要使用slot作用域插槽来实现。

 

代码如下:子组件

  1. <template id="cpn">
  2. <div>
  3. <slot :data="pColor">
  4. <div>
  5. <ul->
  6. <li v-for="item in pColor">{{item}}</li>
  7. </ul->
  8. </div>
  9. </slot>
  10. </div>
  11. </template>

代码中,:data=“pColor”就是将子组件的数组存到data中。(data是名字,随便起)。

代码:父组件

  1. <div id="app">
  2. <cpn></cpn>
  3. <cpn>
  4. <!-- 2.5.x以下-->
  5. <template slot-scope="slot">
  6. <!-- <span v-for="item in slot.data">{{item}}&#45;&#45;&#45;&#45;</span>-->
  7. <span >{{slot.data.join(' - ')}}</span>
  8. </template>
  9. </cpn>
  10. </div>

父组件中,需要使用slot-scope属性获取刚才的data值。(同样代码中slot是名字也可以随便起)。

结果:

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小小林熬夜学编程/article/detail/191657
推荐阅读
相关标签
  

闽ICP备14008679号