• Vue.js入门(9)组件插槽


    序言

    组件的最大特性就是复用性,而用好插槽能大大提高组件的可复用能力

    匿名插槽

    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <title>Document</title>
      <script type="text/javascript" src="../../assets/js/vue.js"></script>
    </head>
    <body>
      <div id="app">
        <!-- 父组件向子组件传递内容 -->
        <alert-box>有bug发生</alert-box>
        <alert-box>有一个警告</alert-box>
        <alert-box></alert-box>
      </div>
    
      <template id="slottmpl">
        <div>
          <strong>ERROR:</strong>
           <!-- 子组件插槽 -->
          <slot>默认内容</slot>
        </div>
      </template>
    
      <script type="text/javascript">
        // 子组件插槽
        Vue.component('alert-box', {
          template:'#slottmpl',
        });
    
        var vm = new Vue({
          el: '#app',
          data: {
            
          }
        });
      </script>
    </body>
    </html>
    View Code

    具名插槽

    • 具有名字的插槽

    • 使用 <slot> 中的 "name" 属性绑定元素
    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <title>Document</title>
      <script type="text/javascript" src="../../assets/js/vue.js"></script>
    </head>
    <body>
      <div id="app">
        <base-layout>
          <p slot='header'>标题信息</p>
          <p>主要内容1</p>
          <p>主要内容2</p>
          <p slot='footer'>底部信息信息</p>
        </base-layout>
    
        <base-layout>
          <template slot='header'>
            <p>标题信息1</p>
            <p>标题信息2</p>
          </template>
          <p>主要内容1</p>
          <p>主要内容2</p>
          <template slot='footer'>
            <p>底部信息信息1</p>
            <p>底部信息信息2</p>
          </template>
        </base-layout>
      </div>
    
      <template id="slottmpl">
        <div>
          <header>
            <slot name='header'></slot>
          </header>
          <main>
            <slot></slot>
          </main>
          <footer>
            <slot name='footer'></slot>
          </footer>
        </div>
      </template>
    
    
      <script type="text/javascript">
        /*
          具名插槽
        */
        Vue.component('base-layout', {
          template:'#slottmpl',
        });
        
        var vm = new Vue({
          el: '#app',
          data: {
            
          }
        });
      </script>
    </body>
    </html>
    View Code

    作用域插槽

    • 父组件对子组件加工处理

    • 既可以复用子组件的slot,又可以使slot内容不一致

    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <title>Document</title>
      <script type="text/javascript" src="../../assets/js/vue.js"></script>
    </head>
    <style type="text/css">
      .current {
        color: orange;
      }
    </style>
    <body>
      <div id="app">
        <fruit-list :list='list'>
          <template slot-scope='slotProps'>
            <strong v-if='slotProps.info.id==3' class="current">{{slotProps.info.name}}</strong>
            <span v-else>{{slotProps.info.name}}</span>
          </template>
        </fruit-list>
      </div>
    
      <template id="slottmpl">
        <div>
          <li :key='item.id' v-for='item in list'>
            <slot :info='item'>{{item.name}}</slot>
          </li>
        </div>
      </template>
    
      <script type="text/javascript">
        /*
          作用域插槽
        */
        Vue.component('fruit-list', {
          props: ['list'],
          template:'#slottmpl',
        });
        var vm = new Vue({
          el: '#app',
          data: {
            list: [{
              id: 1,
              name: 'apple'
            },{
              id: 2,
              name: 'orange'
            },{
              id: 3,
              name: 'banana'
            }]
          }
        });
      </script>
    </body>
    </html>
    View Code

    资料

  • 相关阅读:
    .Net vs Java?
    使用HyperV安装Linux系统
    C#调用Lua
    KubernetesService介绍服务发现
    缓存雪崩、缓存击穿和缓存穿透
    10 个开源项目
    minikube cncf.io
    Parallel的使用
    通过Rancher Desktop在桌面上运行K8s
    2021 .NET 开发者峰会顺利在网上落幕,线上直播回看汇总
  • 原文地址:https://www.cnblogs.com/cnki/p/13388400.html
Copyright © 2020-2023  润新知