• 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中的内容。

  • 相关阅读:
    树莓派4B 多屏 QT程序窗口全屏 QScreen 只能获取1个屏幕
    树莓派4B 微雪7寸触摸屏 双屏 触摸屏校正
    虚拟机 ubuntu18 树莓派4 QT5.14.2 交叉编译
    Qt 指定 so库 运行时路径
    building qtqml requires python
    python django 测试报告 发送邮件
    jmeter XPath Extractor
    python+unittest+HTMLTestRunner生成测试报告
    Genymotion、 uiautomatorviewer、 appium报错
    jmeter forEach控制器
  • 原文地址:https://www.cnblogs.com/huzhuo/p/7477704.html
Copyright © 2020-2023  润新知