slot内容分发的使用

一、定义了一个组件custom,该组件本身已经具备template模板了,直接调用<custom></custom>即可渲染模板

<div id="app">
    <custom></custom>
</div>
<script>
    Vue.component(‘custom‘,{
        template:`
            <div class="customStyle">
                <p>custom组件内容一</p>
                <p>custom组件内容二</p>
                <p>custom组件内容三</p>
            </div>
        `
    })
    new Vue({
        el:‘#app‘
    })
</script>

二、匿名插槽
现在,在使用组件custom的同时,想替换这个组件默认已经定义好的模板,就可以使用slot内容分发
用法:
在<custom></custom>内部写入一些希望展示的html模板,比如
<custom><div>我是自定义的模板</div></custom>,然后,将组件template用<slot></slot>包裹起来,即:

<div id="app">
    <custom><div>我是自定义的模板</div></custom>
</div>
<script>
    Vue.component(‘custom‘,{
        template:`
            <div class="customStyle">
                <slot>
                    <p>custom组件内容一</p>
                    <p>custom组件内容二</p>
                    <p>custom组件内容三</p>
                </slot>
            </div>
        `
    })
    new Vue({
        el:‘#app‘
    })
</script>

那么,
当在custom标签内有自定义的模板时,那么就会替代slot内部的模板内容,渲染到页面
而当在custom标签内没有自定义的模板,那么就会渲染slot内部的模板内容

这就是匿名插槽,不用设置名称属性name,单个插槽可以放置在组件的任意位置,但是就像它的名字一样,一个组件中只能有一个该类插槽。相对应的,具名插槽就可以有很多个,只要名字(名称属性)不同就可以了。

二、具名插槽
在custom标签内有自定义的模板,数量很多,想让custom标签内某部分的模板渲染到,组件内部对应的位置时,就使用具名插槽了

<div id="app">
    <custom>

        <div slot="one">替换组价内容一</div>
        <div slot="three">替换组价内容三</div>

        <template slot="two">  //当自定义的模板内容很多时,就可以使用template括起来,写上slot
            <div>替换组价内容二</div>
            <div>替换组价内容二</div>
            <div>替换组价内容二</div>
            <div>替换组价内容二</div>
            <div>替换组价内容二</div>
        </template>

        <div>替换无名的slot</div>  //没写slot属性值时,就默认替换slot没有name值的那个模板内容

    </custom>
</div>
<script>
    Vue.component(‘custom‘,{
        template:`
            <div class="customStyle">

                    <slot name="one><p">custom组件内容一</p></slot>
                    <slot name="two"><p>custom组件内容二</p></slot>
                    <slot name="three"><p>custom组件内容三</p></slot>

                    <slot><p>我是无名的slot</p></slot>

            </div>
        `
    })
    new Vue({
        el:‘#app‘
    })
</script>

三、编译作用域

<div id="app"> //id为app所在的区域都属于父组件
<custom> //这是父组件,所以这个message渲染的是父组件里的message
{{message}}
</custom>
</div>
<script>
Vue.component(‘custom‘,{
data(){
return {
message:‘我是子组件的数据‘
}
},
template:`
<div class="customStyle">
{{message}} //这是子组件,所以这个message渲染的是子组件里的message
<h2>我是默认的永远都显示的模板内容</h2>
<slot></slot>

        </div>
    `
})
new Vue({
    el:‘#app‘,
    data:{
        message:‘我是父组件的数据‘
    }
})

</script>



四、总结:匿名插槽:看到自定义组件内容有模板时,直接联想到可以替换组件定义时template的<slot></slot>里的内容,如果模板内容没有slot包裹,则默认全部永远都显示(只要调用了这个组件)
具名插槽:看到自定义组件内容内的模板有slot属性值,则和组件定义时template的<slot></slot>上的name值一一对应

原文地址:https://blog.51cto.com/9161018/2355816

时间: 2024-08-10 23:15:37

slot内容分发的使用的相关文章

slot内容分发

slot 内容分发:为了让组件可以组合,我们需要一种方式来混合父组件的内容与子组件自己的模板. 比如我们遇到组件需要相互嵌套这样的情况: App.vue 文件 <template> <div class="app"> <Hello> <World></World> <Vue></Vue> </Hello> </div> </template> Hello.vue 文件

Vue内容分发slot

前面的话 为了让组件可以组合,需要一种方式来混合父组件的内容与子组件自己的模板.这个过程被称为 内容分发 (或 “transclusion” ).Vue实现了一个内容分发 API,参照了当前 Web 组件规范草案,使用特殊的 <slot> 元素作为原始内容的插槽.本文将详细介绍Vue内容分发slot 编译作用域 在深入内容分发 API 之前,先明确内容在哪个作用域里编译.假定模板为 <child-component> {{ message }} </child-compone

Vue学习笔记入门篇——组件的内容分发(slot)

本文为转载,原文:Vue学习笔记入门篇--组件的内容分发(slot) 介绍 为了让组件可以组合,我们需要一种方式来混合父组件的内容与子组件自己的模板.这个过程被称为 内容分发 (或 "transclusion" 如果你熟悉 Angular).Vue.js 实现了一个内容分发 API,使用特殊的 'slot' 元素作为原始内容的插槽. 编译作用域 在深入内容分发 API 之前,我们先明确内容在哪个作用域里编译.假定模板为: <child-component> {{ messa

Vue一个案例引发「内容分发slot」的最全总结

今天我们继续来说说 Vue,目前一直在自学 Vue 然后也开始做一个项目实战,我一直认为在实战中去发现问题然后解决问题的学习方式是最好的,所以我在学习一些 Vue 的理论之后,就开始自己利用业余时间做了一个项目,然后通过项目中的一些案例进行总结. 今天我们来说说 Vue 中的内容分发 <slot>,首先 Vue 实现了一套内容分发的 API,这套 API 是基于当前的 Web Components 规范草案,将 <slot> 元素作为承载内分发内容的出口,内容分发是 Vue 中一个

组件(4):使用slot进行内容分发

组件的作用域(一) 父组件模板的内容在父组件作用域内编译:子组件模板的内容在子组件作用域内编译. 父子组件的编译相互独立,编译时只能使用各自作用域中的属性和方法,例如,你不可以在父组件模板内,将一个指令绑定到子组件的属性或方法上.如果这么做控制台会报一个属性未定义的错误. 如果想要绑定一个指令以便控制子组件的行为,那么你可以在子组件的模板内,将一个指令绑定到子组件的属性或方法上:或者在父组件的模板内,将指令绑定到父组件的属性或方法上. new Vue({ el: '#app-2', data:

Vue:Axios异步通信、计算属性、内容分发、自定义事件

1. Axios 什么是Axios Axios 是一个开源的可以用在浏览器端和 NodeJS 的异步通信框架,她的主要作用就是实现 AJAX 异步通信,其功能特点如下: 从浏览器中创建 XMLHttpRequests 从 node.js 创建 http 请求 支持 Promise API [JS中链式编程] 拦截请求和响应 转换请求数据和响应数据 取消请求 自动转换 JSON 数据 客户端支持防御 XSRF(跨站请求伪造) GitHub:https://github.com/axios/axio

CDN(内容分发网络)技术原理

原文转自:http://kb.cnblogs.com/page/121664/ 1. 前言 Internet的高速发展,给人们的工作和生活带来了极大的便利,对Internet的服务品质和访问速度要求越来越高,虽然带宽不断增加,用户数量也在不断增加,受Web服务器的负荷和传输距离等因数的影响,响应速度慢还是经常抱怨和困扰.解决方案就是在网络传输上利用缓存技术使得Web服务数据流能就近访问,是优化网络数据传输非常有效的技术,从而获得高速的体验和品质保证. 网络缓存技术,其目的就是减少网络中冗余数据的

CDN 内容分发网络

CDN的全称是Content Delivery Network,即内容分发网络.其基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输的更快.更稳定.通过在网络各处放置节点服务器所构成的在现有的互联网基础之上的一层智能虚拟网络,CDN系统能够实时地根据网络流量和各节点的连接.负载状况以及到用户的距离和响应时间等综合信息将用户的请求重新导向离用户最近的服务节点上.其目的是使用户可就近取得所需内容,解决 Internet网络拥挤的状况,提高用户访问网站的响应速度. 一.

[转]CDN(内容分发网络)技术原理

1. 前言 Internet的高速发展,给人们的工作和生活带来了极大的便利,对Internet的服务品质和访问速度要求越来越高,虽然带宽不断增加, 用户数量也在不断增加,受Web服务器的负荷和传输距离等因数的影响,响应速度慢还是经常抱怨和困扰.解决方案就是在网络传输上利用缓存技术使得Web服 务数据流能就近访问,是优化网络数据传输非常有效的技术,从而获得高速的体验和品质保证. 网络缓存技术,其目的就是减少网络中冗余数据的重复传输,使之最小化,将广域传输转为本地或就近访问.互联网上传递的内容,大部