• Vue.js 基础学习之插槽slot


    在组件中用slot插槽可以使组件中添加的内容可改,若直接定义组件,则组件中的内容只能在组件中改动,但是如果用上slot插槽便不同了

    如:

    <div id="app">
        <panel></panel>
        </div>
        <template id="panel-tpl">
            <div class="panel" style=" 500px;border: 1px solid #999;">
            <div class="title" style="padding: 15px;border-bottom: 1px solid #999;">{{title}}</div>
            <div class="content" style="padding: 15px;">{{content}}</div>
            <div class="footer" style="padding: 15px; border-top:1px solid #999;">{{footer}}</div>
        </div>
        </template>
    <script>
        Vue.component('panel',{
            template : '#panel-tpl',
            data : function(){
                return {
                    title : '标题',
                    content : '内容',
                    footer : '底部',
                };
            }
        });
        new Vue({
            el : '#app',
        });
    </script>

    上面这段代码便只能在组件panel内部改动各部分内容。有了slot我们便可以在外部改动了,若只有一个slot则组件标签中间的内容便是slot标签所在地方的内容

    <div id="app">
        <panel>
            {{ content }}
        </panel>
        </div>
        <template id="panel-tpl">
            <div class="panel" style=" 500px;border: 1px solid #999;">
            <div class="title" style="padding: 15px;border-bottom: 1px solid #999;">{{title}}</div>
            <div class="content" style="padding: 15px;">
            <slot></slot>
            </div>
            <div class="footer" style="padding: 15px; border-top:1px solid #999;">{{footer}}</div>
        </div>
        </template>
    <script>
        Vue.component('panel',{
            template : '#panel-tpl',
            data : function(){
                return {
                    title : '标题',
                    content : '内容',
                    footer : '底部',
                };
            }
        });
        new Vue({
            el : '#app',
            data : {
                content : '这是外部设置的内容',
            },
        });
    </script>

    若有多个slot,则要为每个slot设置一个name 

    <div id="app">
        <panel>
            <div slot='title'>{{title}}</div>
            <div slot='content'>{{content}}</div>
            <div slot='footer'>{{footer}}</div>
        </panel>
            输入标题:<input type="text" v-model='title'>
            输入内容:<input type="text" v-model='content'>
            输入底部:<input type="text" v-model='footer'>
        </div>
        <template id="panel-tpl">
            <div class="panel" style=" 500px;border: 1px solid #999;">
            <div class="title" style="padding: 15px;border-bottom: 1px solid #999;">
                <slot name='title'></slot>
            </div>
            <div class="content" style="padding: 15px;">
            <slot name='content'></slot>
            </div>
            <div class="footer" style="padding: 15px; border-top:1px solid #999;">
                <slot name='footer'></slot>
            </div>
        </div>
        </template>
    <script>
        Vue.component('panel',{
            template : '#panel-tpl',
        });
        new Vue({
            el : '#app',
            data : {
                title : '这是外部设置的标题',
                content : '这是外部设置的内容',
                footer : '这是外部设置的底部',
            },
        });
    </script>

    上面这段代码可以通过input输入框动态的改变组件panel中的内容。

  • 相关阅读:
    Android 自定义View (二) 进阶
    设计模式 装饰者模式 带你重回传奇世界
    Android 自定义View (一)
    C++ 习题 输出日期时间--友元类
    设计模式 观察者模式 以微信公众服务为例
    Binomial Coeffcients 历届山东省省赛题
    做一只美腻的程序媛
    java编程中容易犯2的细节汇总
    Arrays.asList()
    SQL Server用表组织数据
  • 原文地址:https://www.cnblogs.com/huzhuo/p/7477704.html
Copyright © 2020-2023  润新知