zoukankan      html  css  js  c++  java
  • Vue基础-作用域插槽-列表组件

    Vue 测试版本:Vue.js v2.5.13

    Vue 官网介绍作用域插槽时,

    在 2.5.0+,slot-scope 能被用在任意元素或组件中而不再局限于 <template>

    作用域插槽更典型的用例是在列表组件中,允许使用者自定义如何渲染列表的每一项:

    例子:

    <my-awesome-list :items="items">
      <!-- 作用域插槽也可以是具名的 -->
      <li
        slot="item"
        slot-scope="props"
        class="my-fancy-item">
        {{ props.text }}
      </li>
    </my-awesome-list>

    列表组件的模板:

    <ul>
      <slot name="item"
        v-for="item in items"
        :text="item.text">
        <!-- 这里写入备用内容 -->
      </slot>
    </ul>

    其实到这里,我自己倒腾了下,一开始没有弄出来,后来理了理思绪才弄出来,完整代码是这样:

    <parent-component v-bind:items="items"></parent-component>
    window.onload = function() {
    
        Vue.component('parent-component', {
            template: `
         <my-awesome-list :items="items">
         <!-- 作用域插槽也可以是具名的 -->
            <li
              slot="item"
              slot-scope="props"
              >
              {{ props.text }}
            </li>
          </my-awesome-list>
           `,
            props: ['items']
        });
    
        Vue.component('my-awesome-list', {
            template: `
            <ul>
              <slot name="item"
                v-for="item in items"
                :text="item.text">
                <!-- 这里写入备用内容 -->
              </slot>
            </ul>
            `,
            props: ['items']
        });
    
        new Vue({
            el: '#app',
            data: {
                items: [
                    { text: '111' },
                    { text: '222' },
                    { text: '333' }
                ]
            }
        });
    };

    当然,也可以这样:

    <my-awesome-list :items="items">
                <!-- 作用域插槽也可以是具名的 -->
                <li slot="item" slot-scope="props">
                    {{ props.text }}
                </li>
    </my-awesome-list>
    window.onload = function() {
    
        Vue.component('my-awesome-list', {
            template: `
            <ul>
              <slot name="item"
                v-for="item in items"
                :text="item.text">
                <!-- 这里写入备用内容 -->
              </slot>
            </ul>
            `,
            props:['items']
        });
    
        new Vue({
            el: '#app',
            data: {
                items: [
                    { text: '111' },
                    { text: '222' },
                    { text: '333' }
                ]
            }
        });
    };

    参考文档:

    https://cn.vuejs.org/v2/guide/components.html#作用域插槽

  • 相关阅读:
    NIO(二)
    前端面试题整理及答案
    win10休眠后屏幕唤不醒
    Python 将多个列表相同索引的元素进行拼接并输出
    Airtest 常用方法
    windows 各种巨强工具包
    mysql 主从数据同步配置
    windows 10 21H1 顶部任务栏点击音量或其他图标不出弹框
    html5 tts(文字朗读)
    为 map 中不存在的 key 提供缺省值
  • 原文地址:https://www.cnblogs.com/xianshenglu/p/8469478.html
Copyright © 2011-2022 走看看