vue作用域插槽示例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>作用域插槽具有代表性的实例</title>
</head>
<body>
<div id="mylist">
    <my-awesome-list :items="items">
        <template slot="item11" scope="props1">
            <li class="my-fancy-item">
                {{props1.text}}
            </li>
        </template>
    </my-awesome-list>
</div>
<script src="https://unpkg.com/vue/dist/vue.js"></script>
<script>
    var child={
            props:["items"],
            template:'
            <ul>
               <slot name="item11"
                     v-for="item in items"
                     :text="item.text">
               </slot>
            </ul>
        '
    };
    new Vue({
        el:"#mylist",
        data:{
            items:[
                {text:'这是作用域插槽具有代表性的实例'},
                {text:'这是作用域插槽具有代表性的实例2'},
                {text:'这是作用域插槽具有代表性的实例3'}
            ]
        },
        components:{
            'my-awesome-list':child
        }
    })

    /*分析

    子组件:
     <ul>
         <slot name="item11"-----------------具名slot 给父组件替换的地方
             v-for="item in items"---取出其中的一个item
             :text="item.text">    ---props1:作用域插槽,传递给父组件,
         </slot>
     </ul>

    父组件:
     <my-awesome-list :items="items">-----------------通过props属性传递items数据给子组件
         <template slot="item11" scope="props1">------------item11:具名slot 替换子组件的数据,---props1:作用域插槽,子组件传来,
             <li class="my-fancy-item">
                 {{props1.text}}
             </li>
         </template>
     </my-awesome-list>

    */
</script>
</body>
</html>
View Code

分析写在注释里了

下面是对比 不用作用域插槽的情况,也就是普通列表渲染

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>作用域插槽具有代表性的实例</title>
</head>
<body>
<div >
    <my-awesome-list :items="items">

    </my-awesome-list>
</div>
<script src="https://unpkg.com/vue/dist/vue.js"></script>
<script>
    var child={
            props:["items"],
            template:'
            <ul>
               <slot name="item11"
                     v-for="item in items"
                     :text="item.text">
                    <li> {{item.text}}</li>
               </slot>
            </ul>
        '
    };
    new Vue({
        el:"#mylist",
        data:{
            items:[
                {text:'这是作用域插槽具有代表性的实例'},
                {text:'这是作用域插槽具有代表性的实例2'},
                {text:'这是作用域插槽具有代表性的实例3'}
            ]
        },
        components:{
            'my-awesome-list':child
        }
    })


</script>
</body>
</html>