Vue 插槽 slot

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <script src="./vue.v2.6.10.dev.js"></script>
    </head>
    <body>
        <div id="app">
            <child content='<p>Muzico</p>'></child>
        </div>
        
        <script>
            Vue.component('child', {
                props: ['content'],
                template: `
                    <div>
                    <p>hello</p>
                    <div v-html="this.content"></div>
                    </div>
                `,
            })
            
            var vm = new Vue({
                el: '#app',
            })
        </script>
    </body>
</html>

使用 slot:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <script src="./vue.v2.6.10.dev.js"></script>
    </head>
    <body>
        <div id="app">
            <child>
                <p>Muzico</p>
            </child>
        </div>
        
        <script>
            Vue.component('child', {
                props: ['content'],
                template: `
                    <div>
                        <p>hello</p>
                        <slot></slot>
                    </div>
                `,
            })
            
            var vm = new Vue({
                el: '#app',
            })
        </script>
    </body>
</html>
<slot>默认内容</slot>

如果 <child></child> 没有内容就会显示默认内容。

多插槽的时候可以命名方式来区别。

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <script src="./vue.v2.6.10.dev.js"></script>
    </head>
    <body>
        <div id="app">
            <child>
                <div slot='header'>header</div>
                <div slot='footer'>footer</div>
            </child>
        </div>
        
        <script>
            Vue.component('child', {
                props: ['content'],
                template: `
                    <div>
                        <slot name="header"></slot>
                        <div>content</div>
                        <slot name="footer"></slot>
                    </div>
                `,
            })
            
            var vm = new Vue({
                el: '#app',
            })
        </script>
    </body>
</html>