zoukankan      html  css  js  c++  java
  • 如何让vue自定义组件可以包裹内容,并且渲染出来,以及组件的组合使用

    当我们用vue一开始写项目时,按需求文档自定义了一个公用组件,这个组件很多地方都用到了,然后随着项目的推进,又有了新的需求要在里面加东西,但又不是所有的地方都要加

    这时候我们想这样往里面塞内容↓    <my-template>是我们自定义的公共组件

    <my-template>
        <h2>想加入一个子标题</h2>
    </my-template>

    但这样运行代码后,发现页面还是以前的样子,这个div并没有出现,这个时候该怎么办呢

    这里我们就要用到一个vue的功能:插槽slot

    slot是定义在子组件里的,用来接收父组件使用时包裹的内容

    <div id="app">
        <son-demo>
            <h2>新增一个子标题</h2>
        </son-demo>
    </div>
    
    <script type="text/x-template" id="sonModel">
        <h1>开始有的标题</h1>
        <slot></slot>  //这里就是用来接收父组件传过来的内容,我们也可以设置默认值,当父不传时显示
    </script>
    
    <script>
        //定义子组件
        var sonDemo = {
            template: "#sonModel",
        }
        //父组件
        new Vue({
            el: '#app',
            components: { sonDemo },
        });
    </script>

    这时候我们已经完成需求了,很开心,但第二天事比产品经理又来搞事情了,那就是不仅要加一个标题还要加一段内容,但这个内容并不和标题在一起中间隔了很多代码,这时候该怎么办呢

    这里就要用到slot的内容分发了

    <div id="app">
        <son-demo>
            <h2 slot="title">新增一个子标题</h2>
            <div slot="body">新加内容</div>
        </son-demo>
    </div>
    
    <script type="text/x-template" id="sonModel">
        <h1>开始有的标题</h1>
        <slot name="title"></slot>
        <slot name="body"></slot>
    </script>
    
    <script>
        //定义子组件
        var sonDemo = {
            template: "#sonModel",
        }
        //父组件
        new Vue({
            el: '#app',
            components: { sonDemo },
        });
    </script>

    其实我们不仅可以分发原生的html代码内容,也可以用其他子组件,在使用子组件时也加上slot=“body”,这样在body里面也会渲染出对应的子组件,这也就是组件的相互组合使用

     再来看一个父组件使用scope定义子组件模板结构的例子,这里有点难理解,还是需要自己动手去写一遍才能理解深刻

    看了一下官网:在 2.6.0 中,我们为具名插槽和作用域插槽引入了一个新的统一的语法 (即 v-slot 指令)。它取代了 slot 和 slot-scope 这两个目前已被废弃但未被移除且仍在文档中的特性。

    也就是把父组件使用slot时的关键字变成了v-slot,同时也加了新功能

    动态参数也可以用在 v-slot 上,来定义动态的插槽名:

    <base-layout>
      <template v-slot:[dynamicSlotName]>
        ...
      </template>
    </base-layout>
  • 相关阅读:
    为什么要使用Handler
    使用Java中的Timer和TimerTask
    Top子句对查询计划的影响
    一个单表死锁的示例
    tracer token 追踪标记
    DDL Trigger
    事物复制的troubleshooting 1
    在分发服务器上查看信息
    将windows 2003 sp2的cluster升级到windows 2008 r2
    DistributionDB过大的原因
  • 原文地址:https://www.cnblogs.com/bobo1/p/10789380.html
Copyright © 2011-2022 走看看