zoukankan      html  css  js  c++  java
  • vue 插槽

    默认插槽(匿名插槽)

    father.vue

    <template>
      <div class="father">
        <h3>这里是父组件</h3>
        <child>
          <div class="tmpl">
            <span>菜单1</span>
            <span>菜单2</span>
          </div>
        </child>
      </div>
    </template>
    
    <script>
      import child from "./child";
    
      export default {
        name: "father",
        components: {
          child
        }
      }
    </script>

     因为父组件在里面写了html模板,那么子组件的匿名插槽这块模板就是下面这样。也就是说,子组件的匿名插槽被使用了,是被下面这块模板使用了。

    child.vue

    <template>
      <div class="child">
        <h3>这里是子组件</h3>
        <slot></slot>
      </div>
    </template>
    
    <script>
      export default {
        name: "slot"
      }
    </script>

    具名插槽

    father.vue

    <template>
      <div class="father">
        <h3>这里是父组件</h3>
        <child>
          <div class="tmpl" slot="up">
            <span>菜单1</span>
            <span>菜单2</span>
          </div>
          <div class="tmpl" slot="down">
            <span>菜单-1</span>
            <span>菜单-2</span>
          </div>
          <div class="tmpl">
            <span>菜单->1</span>
            <span>菜单->2</span>
          </div>
        </child>
      </div>
    </template>
    
    <script>
      import child from "./child";
    
      export default {
        name: "father",
        components: {
          child
        }
      }
    </script>

    child.vue

    <template>
      <div class="child">
        <h3>这里是子组件</h3>
        <!--    具名插槽-->
        <slot name="up"></slot>
        <!--    具名插槽-->
        <slot name="down"></slot>
        <!--    匿名插槽-->
        <slot></slot>
      </div>
    </template>
    
    <script>
      export default {
        name: "slots"
      }
    </script>

    作用域插槽(带数据的插槽)

    father.vue

    <template>
      <div class="father">
        <h3>这里是父组件</h3>
        <child>
          <div class="tmpl" slot="up">
            <span>具名插槽-up-1</span>
            <span>具名插槽-up-2</span>
          </div>
        </child>
        <child>
          <div class="tmpl" slot="down">
            <span>具名插槽-down-1</span>
            <span>具名插槽-down-2</span>
          </div>
        </child>
        <child>
          <div class="tmpl">
            <span>匿名插槽-1</span>
            <span>匿名插槽-2</span>
          </div>
        </child>
        <child-data>
          <template slot-scope="props">
            <span>作用域插槽</span>
            {{props.data.name}}
          </template>
        </child-data>
      </div>
    </template>
    
    <script>
      import child from "./child";
      import childData from "./childData";
    
      export default {
        name: "father",
        components: {
          child,
          childData
        }
      }
    </script>

    child.vue 同上

    childData.vue

    <template>
      <div class="child">
        <!--    作用域插槽-->
        <slot :data="data"></slot>
      </div>
    </template>
    
    <script>
      export default {
        name: "childData",
        data: function () {
          return {
            data: {
              name: 'vue',
              isUse: true
            }
          }
        },
      }
    </script>
  • 相关阅读:
    [LeetCode] 159. Longest Substring with At Most Two Distinct Characters 最多有两个不同字符的最长子串
    [LeetCode] 76. Minimum Window Substring 最小窗口子串
    window.scrollTo和window.scrollBy
    background-clip与background-origin
    page-break-before和page-break-after
    CSS counter计数器(content目录序号自动递增)详解
    移动端网页巧用 margin和padding 的百分比实现自适应
    监听屏幕旋转事件window. onorientationchange
    apple-touch-startup-image 制作iphone web应用程序的启动画面
    当把链接保存到手机桌面。设置图标 只在safari浏览器中有用
  • 原文地址:https://www.cnblogs.com/ronle/p/12179743.html
Copyright © 2011-2022 走看看