zoukankan      html  css  js  c++  java
  • 436 vue slot:插槽基本使用,具名插槽,作用域插槽

    1. 插槽 : 替换内容 / 分发内容

      (1)占位,像出口<router-view></router-view>。
      (2)没有新的内容放进来,就用默认的。
      (3)<slot></slot>将被替换成组件内的对应子节点。
    


    2. 基本使用

    <el-car>
        <div>宝马发动机</div>
    </el-car>
    

    组件的内部

    <slot></slot>

    ~


    02-插槽的基本使用.html

    <!DOCTYPE html>
    <html lang="en">
    
    <head>
      <meta charset="UTF-8" />
      <title>Document</title>
    </head>
    
    <body>
      <!-- 
        需求1:  仅仅是改文字 
                大众发动机 => 奥迪发动机 
        需求2 : 文字 + 标签
                <div>大众发动机</div>  => <p>奥迪发动机</p>
    
        插槽 :  替换内容 / 分发内容 【占位,没有新的内容放进来,就用默认的。】
      -->
    
      <div id="app">
        <!-- 第一次使用 -->
        <el-car>
          <div>大众发动机</div>
        </el-car>
        <!-- 第二次使用 -->
        <el-car>
          <p>奥迪发动机</p>
        </el-car>
        <!-- 第三次使用 -->
        <el-car></el-car>
      </div>
    
      <template id="tpl">
        <div>
          <h3>提示</h3>
          <!-- slot 可以给默认的内容,也可以不给,不给就没内容,就不显示 -->
          <slot>
            <p>国产雅迪迪</p>
          </slot>
          <button>取消</button>
          <button>确定</button>
        </div>
      </template>
    
      <script src="./vue.js"></script>
      <script>
        // 注册组件
        Vue.component('el-car', {
          template: `#tpl`
        })
    
        const vm = new Vue({
          el: '#app',
          data: {}
        })
      </script>
    </body>
    
    </html>
    

    3. 具名插槽

    <h3 slot='n1'>提示</h3>
    <p slot='n2'>奥迪发动机</p>
    

    组件的内部


    03-插槽的具名.html

    <!DOCTYPE html>
    <html lang="en">
    
    <head>
      <meta charset="UTF-8" />
      <title>Document</title>
    </head>
    
    <body>
      <!-- 
        具名 : 给插槽加个名字  
        【场景:有2个以上的插槽,视情况替换某个/些插槽。】
        需求3 : 把 提示 和 大众发动机 都要给替换掉
      -->
    
      <div id="app">
        <!-- 第一次使用 -->
        <el-car>
          <!-- 这里,slot属性给普通标签添加,不是给组件标签添加 -->
          <h3 slot="n1">大众提示</h3>
          <div slot="n2">大众发动机</div>
        </el-car>
    
        <!-- 第二次使用 -->
        <el-car>
          <h3 slot="n1">奥迪提示</h3>
          <p slot="n2">奥迪发动机</p>
        </el-car>
      </div>
    
      <template id="tpl">
        <div>
          <!-- 这里,具名插槽,加上name属性。 -->
          <slot name='n1'></slot>
          <slot name='n2'></slot>
          <button>取消</button>
          <button>确定</button>
        </div>
      </template>
    
      <script src="./vue.js"></script>
      <script>
        // 注册组件
        Vue.component('el-car', {
          template: `#tpl`
        })
    
        const vm = new Vue({
          el: '#app',
          data: {}
        })
      </script>
    </body>
    
    </html>
    

    ~


    04-模拟一个el-input.html

    <!DOCTYPE html>
    <html lang="en">
    
    <head>
      <meta charset="UTF-8" />
      <title>Document</title>
    </head>
    
    <body>
      <div id="app">
        <el-input>
          <!-- append:就会去替换 -->
          <span slot="append">搜索</span>
        </el-input>
      </div>
    
      <template id="tpl">
        <div>
          <slot name='prepend'></slot>
          <input />
          <slot name='append'></slot>
        </div>
      </template>
    
      <script src="./vue.js"></script>
      <script>
        // 组件
        Vue.component('el-input', {
          template: `#tpl`
        })
    
        const vm = new Vue({
          el: '#app',
          data: {}
        })
      </script>
    </body>
    
    </html>
    

    ~


    4. 作用域插槽

    组件的子节点想访问组件内部的数据

    <el-car>
      <!-- 
        <p slot-scope='scope'>发动机样式 : {{ scope.type }} {{ scope.num }} {{ scope.row.id }}</p>
      -->
    
      <!-- 都是套一个template -->
      <template slot-scope='scope'>
        <p>发动机样式 {{ scope.type }} {{ scope.row.id  }}</p>
      </template>
    </el-car>
    
    • 组件内部
    <slot :type='type' num='123'></slot>
    
    data(){
      return {
        type: 'EA888',
        row: {
          id: 500
            username: 'admin'
        }
      }
    }
    

    ~


    05-作用域插槽.html

    <!DOCTYPE html>
    <html lang="en">
    
    <head>
      <meta charset="UTF-8" />
      <title>Document</title>
    </head>
    
    <body>
      <!-- 
        作用域插槽 : 获取值
        > 子节点 p 想访问 组件内部的数据 type 无法访问 
        > 因为组件封闭独立的个体
      -->
    
      <div id="app">
        <el-car>
          <!-- 凡是 slot 里面的属性 都将作为 scope 的属性存在 -->
          <!-- 注意,插槽的name属性不能作为 scope 的属性 -->
    
          <!-- 这是 vue 2.5.0 之前的写法   -->
          <p slot-scope="scope">
            发动机样式 {{ scope.row.id }} - {{ scope.row.username }} - {{ scope.num }} - {{ scope.type }}
          </p>
    
          <!-- vue 2.5.0 之后, slot-scope 要写在 template 里面了 -->
          <!-- 
          <template slot-scope="scope">
            <p>发动机样式: {{ scope.type }}</p>
            <p>发动机id: {{ scope.row.id }}</p>
            <p>用户名 : {{ scope.row.username }}</p>
          </template> 
          -->
        </el-car>
      </div>
    
      <template id="tpl">
        <div>
          <h3>提示</h3>
          <!-- 注意,插槽的name属性不能作为 scope 的属性 -->
          <slot :type='type' num='1234' :row='row'></slot>
          <button>取消</button>
          <button>确定</button>
        </div>
      </template>
    
      <script src="./vue.js"></script>
      <script>
        // 组件
        Vue.component('el-car', {
          template: `#tpl`,
          data() {
            return {
              type: 'EA888',
              row: {
                id: 500,
                username: 'admin'
              }
            }
          }
        })
    
        const vm = new Vue({
          el: '#app',
          data: {}
        })
      </script>
    </body>
    
    </html>
    

    ~


    5. 插槽 : 2.6 一下的 (element) => slot / v-slot (后面说)

  • 相关阅读:
    【转载】AB测试结果分析
    【面试】HTTP post请求与get请求的区别
    如何做好接口测试?【转载】
    ContactsUtil 工具类
    接口测试第三课(HTTP协议简介) -- 转载
    接口测试第一课(基础知识篇)
    如果做好测试PM【转载】
    HttpClient发送Get和Post请求
    获取终端ip地址
    接口功能测试策略
  • 原文地址:https://www.cnblogs.com/jianjie/p/12636123.html
Copyright © 2011-2022 走看看