美文网首页
插槽的使用

插槽的使用

作者: 猫晓封浪 | 来源:发表于2020-04-09 11:29 被阅读0次

使用情形:

当子组件除了 template 中内容,还需要再展示父组件传过来的内容时。(当子组件有一部分内容是根据父组件传递过来的 dom 进行显示时,就使用到了插槽)

通过插槽可以更方便的向子组件传递 dom 元素。

  <div id="app">
    <child>
      <p>word</p>
    </child>
  </div>
  <script>
    Vue.component("child", {
      template: `<div>
                  <p>hello</p>
                  <slot></slot>
                </div>`
    })
    var vm = new Vue({
      el: "#app"
    })
  </script>

同时,还可以设置插槽的默认值,当父组件不传递 dom 元素时,显示 slot 默认值。

  <div id="app">
    <child></child>
  </div>
  <script>
    Vue.component("child", {
      template: `<div>
                  <p>hello</p>
                  <slot>default slot</slot>
                </div>`
    })
    var vm = new Vue({
      el: "#app"
    })
  </script>

具名插槽:

要实传入的dom 元素按照需求排列。当使用以下方法时,肯定不适合。

  <div id="app">
    <app-content>
      <div class="header">header</div>
      <div class="footer">footer</div>
    </app-content>
  </div>
  <script>
    Vue.component("app-content", {
      template: `<div>
                  <slot></slot>
                  <div class="content">content</div>
                  <slot></slot>
                </div>`
    })
    var vm = new Vue({
      el: "#app"
    })
  </script>

页面显示如下:


此时会将传进来的 dom 元素按照整体进行渲染。
解决方法:使用具名插槽
   <div id="app">
    <app-content>
      <div class="header" slot="header">header</div>
      <div class="footer" slot="footer">footer</div>
    </app-content>
  </div>
  <script>
    Vue.component("app-content", {
      template: `<div>
                  <slot name="header"></slot>
                  <div class="content">content</div>
                  <slot name="footer"></slot>
                </div>`
    })
    var vm = new Vue({
      el: "#app"
    })
  </script>

在需要传进来的 dom 元素上给相应的节点添加不同的 slot 属性名,然后在子组件中使用 slot 标签并定义对应的 name 属性进行绑定。

具名插槽也可以使用默认值:

  <div id="app">
    <app-content>
      <div class="footer" slot="footer">footer</div>
    </app-content>
  </div>
  <script>
    Vue.component("app-content", {
      template: `<div>
                  <slot name="header">
                    <h1 class="header">defalut header</h1>  
                  </slot>
                  <div class="content">content</div>
                  <slot name="footer"></slot>
                </div>`
    })
    var vm = new Vue({
      el: "#app"
    })
  </script>
插槽只能有一个,而具名插槽可以有多个

作用域插槽

父组件调用子组件时,给子组件传了一个插槽,子组件可以向父组件的插槽里传数据,这个插槽叫做作用域插槽,必须是包含在 template 中,同时申明从子组件接收的数据都放在哪 slot-scope="" ,同时还要告诉子组件模板的信息。

  <div id="app">
    <child>
      <template slot-scope="content">
        <h6>{{content.listitem}}</h6>
      </template>
    </child>
  </div>
  <script>
    Vue.component("child", {
      data: function(){
        return {
          list: [1, 2, 3, 4]
        }
      },
      template: `<div>
                  <ul>
                    <slot v-for="item in list" :listitem = item></slot>  
                  </ul>
                </div>`
    })
    var vm = new Vue({
      el: "#app"
    })
  </script>
上述代码详解:
适应场景:

当子组件做循环,或者子组件某一部分 dom 结构需要从外边传递进来时。

相关文章

  • vue 插槽 slot

    插槽使用 普通插槽 具名插槽 使用具名插槽 从插槽里面传值出来如何接收? 如: 如何判断某个插槽是否被使用 组件内...

  • 【Vue8】插槽

    插槽很重要!插件和模块中会经常使用插槽。 插槽的使用场景 即什么时候使用插槽?比如说这样: 我是插槽slot 父组...

  • vue 插槽slot

    插槽的定义: 插槽的使用:

  • Vue 插槽

    1.插槽的简单使用 在组件中声明一个插槽 使用组件时 可以替换插槽 如果不替换插槽就使用默认值 2.具名...

  • vue插槽

    vue插槽slot的理解与使用 vue slot插槽的使用介绍及总结

  • 【前端Vue】05 - [插槽 ,前端模块化开发,webpack

    1. 插槽 1.1 插槽的基本使用 组件的插槽: 组件的插槽也是为了让我们封装的组件更加具有扩展性。 让使用者可以...

  • Vue学习笔记[12]-slot插槽和编译作用域

    为了使组件具有更多的扩展性,需要使用插槽,使用插槽的组件应为可复用的组件,若为不复用组件,则不应该使用插槽. 使用...

  • vue插槽

    vue插槽使用 1.基本插槽实现父级设置 子级设置 2、使用name设置插槽显示隐藏父组件使用v-slot绑定 子...

  • Vue-使用插槽

    二。具名卡槽 作用域插槽:插槽循环时使用

  • Vue插槽的使用方法

    About 使用插槽是为了能够在页面中显示向组件中传入的新的HTML 一、具名插槽 效果图: 2. 具名插槽的使用...

网友评论

      本文标题:插槽的使用

      本文链接:https://www.haomeiwen.com/subject/saoayctx.html