vue slot 插槽的使用和理解

<slot> 元素作为承载分发内容的出口,可以实现组件的复用。

简单的说就是《定制模板》

一个template由多个插槽组成,分发不同的内容,产生各种形态的组件

  • 一个插槽插入到一个对应的标签中
    简单实例:
<div id="app">
    <!--这里放的内容均属于父级当前模板的,绑定事件也需要绑定父级的-->
    <hello>
        lalalala
        <!--给插槽起好名字-->
        <div slot="div1" @click="fn()">1111111111111</div>
        <div slot="div2">2222222222222</div>
    </hello>
</div>
<template id="temp1">
<!--模板中只有一个根元素-->
<!--slot中可以放置一些默认内容,如果传递了内容则替换掉-->
<!--如果没有名字的标签默认会放置到   name:default的slot中   -->
    <h1>
        hello
        <!--无名插槽-->
        <!--注意:一个组件中不允许有两个匿名插槽-->
        <slot>如果没有lalalala就显示slot中的内容(这是一个匿名插槽)</slot>
        <!--有名插槽 可以根据插槽切换顺序-->
        <div style="color:red" title="123"> <!--防止插槽替换之前的样式属性等信息可以这样处理-->
            <slot name="div2"></slot>
        </div>
        <slot name="div1"></slot>
    </h1>
</template>
<script>
    var app=new Vue({
        el:'#app',
        data:{
        },
        components:{
            hello:{
                template:"#temp1"
            }
        },
        methods:{
          fn(){//
            alert(1)
          }
        }
    })
</script>

页面渲染成这样的


image.png
插槽提供默认的内容

如果组件hello中没有 lalalala 就显示slot中的内容:


image.png

作用域插槽

<div id="root">
        <child>
            <template slot-scope="props"><!--定义一个插槽,该插槽必须放在template标签内-->
                <li>{{props.value}}</li><--!定义使用渲染方式-->
            </template>
        </child>
        <child>
            <template slot-scope="props">
                <h1>{{props.value}}</h1><!--定义不同的渲染方式-->
            </template>
        </child>
    </div>
    <script>
        Vue.component('child',{
            data: function(){
                return {
                    list:[1,2,3,4]
                }
            },
            template: `<div>
                            <ul>
                                <slot v-for="value in list" :value=value>//使用slot占位
                                </slot>
                            </ul>
                        </div>`
        })
        var vm=new Vue({
            el: '#root'
        })
    </script>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 这篇笔记主要包含 Vue 2 不同于 Vue 1 或者特有的内容,还有我对于 Vue 1.0 印象不深的内容。关于...
    云之外阅读 10,486评论 0 29
  • vue概述 在官方文档中,有一句话对Vue的定位说的很明确:Vue.js 的核心是一个允许采用简洁的模板语法来声明...
    li4065阅读 12,118评论 0 25
  • 此文基于官方文档,里面部分例子有改动,加上了一些自己的理解 什么是组件? 组件(Component)是 Vue.j...
    陆志均阅读 9,273评论 5 14
  • 以下内容是我在学习和研究Vue时,对Vue的特性、重点和注意事项的提取、精练和总结,可以做为Vue特性的字典; 1...
    科研者阅读 14,777评论 3 24
  • 谁的过往, 沧桑中心酸; 一生凝结在纸上, 错落成诗行。 露水微微凉, 残秋余几伞。 不思量却自难忘, 唯有你模样...
    道一子阅读 1,513评论 0 2

友情链接更多精彩内容