Vue作用域插槽

2018-09-17  本文已影响0人  清风伴我行

首先简单说下为什么要使用作用域插槽,有时候需要组件带有一个可从子组件获取数据的可复用的插槽。

下面还是通过例子来讲解

一个简单的todo-list组件

        Vue.component('todo-list', {            props: ['text'],            template: `            <ul>

                <li v-for="(item, index) of text" :key="index">

                    <slot :text="item"></slot>

                </li>

            </ul>

            `,

        });

我们通过slot元素,使用v-bind的形式绑定属性传递给父元素,父元素通过slot-scope属性来接收属性,下面是上面的一个运用

        var vm = new Vue({

            el: '#box',

            data: {

                arr: ['css', 'html', 'javascript'],

            },

            template: `

            <div id="box">

                <todo-list :text="arr">

                    <template slot-scope="boses">

                        <h2>这是一个标题</h2>

                        <p>{{boses.text}}</p>

                    </template>

            </todo-list>

            </div>`,

        });

这里我通过template的slot-scope属性接收solt元素传递的text属性,并在p标签内部引用他,这里提示一下slot-scope的名称可以随意起,引用的时候通过.名称的方式引用。

如果环境ES6+,可以通过解构赋值来简写

<div id="box">

                <todo-list :text="arr">

                    <template slot-scope="{text}">

                        <h2>这是一个标题</h2>

                        <p>{{text}}</p>

                    </template>

            </todo-list>

  </div>`

Vue2.5.0+,slot-scope不再限制在<template>元素上使用,而可以用在插槽内的任何元素或组件上。

上一篇 下一篇

猜你喜欢

热点阅读