Vue学习系列 -- slot槽指派

Posted 躬匠

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Vue学习系列 -- slot槽指派相关的知识,希望对你有一定的参考价值。

我们在前面组件的学习章节中,只介绍到了父子组件之间的数据传递,其中对应子组件,只是简单的定义了一个标签。

既然子组件可以作为一个标签,那标签里面如果填充了html元素会怎么样呢?

比如下面的形式:

    <component-demo>
            <h1>title</h1>
            <div>content</div>
            <div>this is the footer</div>
        </component-demo>
    
    
    <script type="text/javascript" src="https://cdn.staticfile.org/vue/2.2.2/vue.min.js"></script>
    <script>
            Vue.component('component-demo',
                props:["template"],
                template: "<div>This is component demo</div>",
                data: function () 
                    return 
                       message : "component data function"
                    
                ,
                computed :,
                methods :
            
        );
        var app = new Vue(
            el : "#app1",
            data : 
                message : "component demo"
            
        )

上面的代码在标签内定义了html元素,那么,最终效果展示的时候会是什么样呢?

效果是标签内定义的title content footer并不会展示。

那如果我们想要展示呢?这就需要用到我们今天用到的内容了:槽指派。

废话不多说,还是通过代码来学习。

<!DOCTYPE html>
<html>
<head>
 <meta charset="utf-8">
 <title>Learning Vue.js</title>
</head>
 
<body>
<div id="app1">
<div>
    <component-demo>
        <h1 slot="title">title</h1>
        <div slot="content">content</div>
        <div>this is the footer</div>
    </component-demo>
</div>
</div>
</body>
 
<!--这里是以CDN引入的方式加载的vue.js-->
<script type="text/javascript" src="https://cdn.staticfile.org/vue/2.2.2/vue.min.js"></script>
<script>
    var template = "<div>" + 
             "<p>" + 
               "<slot name='title'>title</slot>" +
             "</p>" +
             "<p>" + 
               "<slot name='content'>content</slot>" +
             "</p>" + 
             "<div slot='footer'>footer</div>" +        
           "</div>";
    var app = new Vue(
        el : "#app1",
        components : 
            "component-demo" : 
                template: template,
                data : function () 
                    return 
                    
                
            
        ,
        data : 
            title : "learn how to use slot" ,
            content : "this is slot content"
        
    )
</script>
</html>

上面的代码有几个关键点:

  • 子组件需要设置<slot>标签并指定name属性
  • 字标签内的html设置元素时也需要指定slot属性的name并可以和字标签对应起来,只有这样才可以进行替换
  • 如果未在字标签内指定slot元素,则子组件内的元素并不会被替换
  • 对于子组件内未设置slot或者slot设置不匹配的元素,该元素不会展示

效果截图:

是不是很简单?

以上是关于Vue学习系列 -- slot槽指派的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Vue 中向父布局槽发出事件?

Vue系列:Slot 插槽的使用范例

redis 3.2.5 cluster 添加节点和指派槽位

使用 Vue slot 在基础组件中渲染组件

Vue学习系列——基本指令

Vue系列之插槽(slot)详解