Vue item_14 之slot详解

news/2024/7/24 6:47:40

好的代码会说话,码上见

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>vue item_14 slot</title>
    <script src="https://cdn.jsdelivr.net/npm/vue@2.5.16/dist/vue.js"></script>
</head>
<body>
    <div>
    <p>slot标签 基于组件模板内 </p>
    <p>slot特性可在组件 或 普通元素上 其值指向slot的具名</p>
    <p>
        vue组件由template,css,script 三部分构成
    </p>
    <p>
        slot存在于template中,存在于组件标签内的内容会被分发到template中对应的slot标签元素
    </p>
    <p>
        插槽内容可以包含任何html或其他组件模板代码
    </p>
</div>
<hr>
    <div id="app1">
         <navigation-link url="/profile">
            Your Profile 内容会被分发到组件模板上去<br>
            <span class="fa fa-user">前提是组件模板上必须有slot元素</span>
            <br>
            <strong>slot位置也可以嵌套Vue组件模板</strong>
            <noslot-nav></noslot-nav>
        </navigation-link>
        <div></div>
        <noslot-nav>我要显示没用slot元素,其实我是被丢弃,在页面看不到</noslot-nav>
    </div>

    <div id="app2">
        <hr>
        slot元素有一个特殊的特性:name。这个特性可以用来定义额外的插槽:
        <hr>

        <p>
            具名插槽使用在组件上
        </p>
        <base-layout>
            <dhead slot="header"></dhead>
            <p>A paragraph for the main content.</p>
            <p>非具名插槽内容And another one.</p>
            <foot slot="footer"></foot>
        </base-layout>
        <hr>
        <p>
                具名插槽使用在使用在普通元素上
        </p>
        <base-layout>
            无名分会进入默认插槽--- 
            <p slot="header">我是头</p>
            自由民<br>
            <p slot="footer">我是尾</p>
        </base-layout>
    </div>
    <hr>
    <div id="app3">

        <default-slot>
            <p slot="hehe">会出现默认值button</p>
        </default-slot>
        <default-slot>
            我是内容肯定会被button收编,可怜的默认值
        </default-slot>
    </div>

    <div id="app4">
        <p>
            父组件模板的所有东西都会在父级作用域内编译;子组件模板的所有东西都会在子级作用域内编译。
        </p>

    </div>

    <script>

        // 带slot局部组件
        var NavigationLink = {
            template:`
            <div>
                <a
                    v-bind:href="url"
                    class="nav-link"
                >
                <slot></slot>
                </a>
            </div>
            `,
            props:['url']
        }

        // 不带slot的组件
        var NoslotNav = {
            template:`
                <div class=" NoslotNav"> 我是没有包含一个 slot 元素的NoslotNav组件,在我的组件标签间传入的内容,不会显示的</div>
            `
        }

        // 使用插槽
        new Vue({
            components:{ NavigationLink, NoslotNav }
            // 实例方法
        }).$mount('#app1')

        // 作用 
        // 将组件元素标签的内容分发到模板slot位置


        // 具名插槽 /

        // 父组件定义布局
        var baseLayout = {
            template:`
            <div class="container">
                <header>
                    <slot name="header"></slot>
                </header>
                <main>
                    <slot></slot>
                </main>
                <footer>
                    <slot name="footer"></slot>
                </footer>
            </div>
            `
        }

        // 子组件 头
        var dhead = {
            template:`
            <h1>Here might be a page title</h1>
            `
        }

        // 子组件尾
        var foot = {
            template:`
            <p>Here's some contact info</p>
            `
        }

        // 使用具名插槽
        new Vue({
            'el':'#app2',
            components:{baseLayout,dhead,foot}
        })

        // ------ 插槽的默认内容-----------
        var defaultSlot = {
            template:`
            <div>
            <button type="submit">
                <slot>Submit</slot>
            </button>
            <slot name='hehe'></slot>
            </div>
            `
        }

        // 不给插槽内容,显示默认
        new Vue({
            el:'#app3',
            components:{defaultSlot}
        })

        // 

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

http://www.niftyadmin.cn/n/642828.html

相关文章

SSM(spring + spring mvc + mybatis)核心配置

这两天编写了SSM各核心配置文件&#xff0c;真的是踩坑无数。所以写了这个教程&#xff0c;希望能帮大家避免踩雷。如果有错误的地方&#xff0c;希望各位大佬批评指正。 &#xff08;小声bb&#xff1a;还是springboot好用&#xff09; 1. 总体框架(项目结构) 2. 正式开始配置…

BZOJ2694:Lcm——包看得懂/看不懂题解

http://www.lydsy.com/JudgeOnline/problem.php?id2694Description 对于任意的>1的n gcd(a, b)不是n^2的倍数 也就是说gcd(a, b)没有一个因子的次数>2Input 一个正整数T表示数据组数 接下来T行 每行两个正整数 表示N、MOutput T行 每行一个整数 表示第i组数据的结果Samp…

交换机的级联、堆叠和集群

随着计算机数量的增加、网络规模的扩大&#xff0c;在越来越多的局域网环境中&#xff0c;交换机取代了集线器&#xff0c;多台交换机互连取代了单台交换机。在多交换机的局域网环境中&#xff0c;交换机的级联、堆叠和集群是3种重要的技术。级联技术可以实现多台交换机之间的互…

laravel之Eloquent关联

定义 模型 用对象表示的表实例&#xff0c;负责与数据库的交互逻辑构建关联模型 要连接到的最终模型关联方法 返回一个关联关系的方法 关联属性 $with属性 由关联方法名组成的数组,通常用于渴求式加载 连接表 又称中间表&#xff0c;通常用于多对多关系主键 模型的唯一标识符外…

QT tcpserver启动监听SIGSEGV错误

QT tcpserver启动监听SIGSEGV错误 --------------------------- Signal Received --------------------------- <p>The inferior stopped because it received a signal from the operating system.<p><table><tr><td>Signal name : </td>…

SSM框架报错:元素 ‘annotation-driven‘ 必须不含字符 [子级], 因为该类型的内容类型为“仅元素”。

在SSM框架整合fastjson的时候出了一个莫名其妙的BUG&#xff0c;报错内容为&#xff1a;元素 ‘mvc:annotation-driven’ 必须不含字符 [子级], 因为该类型的内容类型为“仅元素”。 我的mvc:annotation-driven内容为&#xff1a; <mvc:annotation-driven><mvc:mess…

JSON数组去重

/* * JSON数组去重 * param: [array] json Array * param: [string] 唯一的key名&#xff0c;根据此键名进行去重 */function uniqueArray(array, key,mergekey){ var result [array[0]]; for(var i 1; i < array.length; i){ var item array[i]; var repe…

非网管和网管交换机区别

交换机可以分为网管交换机以及非网管交换机&#xff0c;而非网管交换机又称为傻瓜型交换机&#xff0c;不需要任何设置&#xff0c;插上网线即可。 什么叫非网管交换机&#xff1f; 非网管交换机&#xff0c;是相对网管型交换机而言的。网管型交换机的数据&#xff0c;会通过简…