首页 > 其他分享 >内容分发

内容分发

时间:2022-12-08 17:24:55浏览次数:34  
标签:分发 Vue 自定义 title 插槽 内容 组件 todo

插槽slot

在vue.js中我们使用<slot>元素作为承载分发内容的出口,作者称其为插槽。可以应用在组合组件的场景中

我们准备制作一个待办事项组件(todo),该组件由代办标题(todo-title)和代办内容(todo-items)组成。

第一步:定义一个待办事项的组件

第二步:让待办事项的标题和值实现动态绑定,留出一个插槽

    1.将上面的代码留出一个插槽,即slot

    2.定义一个名为todo-title的代办标题组件和todo-items的待办内容组件

    3.实例化Vue并初始化数据

    4.将这些值,通过插槽插入

我们的todo-title和todo-items组件分别被分发到了todo组件的todo-title和todo-items插槽中

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

<div id="app">
    <todo>
        <todo-title slot="todo-title" v-bind:title="title"></todo-title>
        <todo-items slot="todo-items" v-for="item in todoItems" v-bind:item="item"></todo-items>
    </todo>
</div>

<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/vue.min.js"></script>
<script>
    //插槽
    Vue.component("todo",{
        template: '<div>\
                        <slot name="todo-title"></slot>\
                        <ul>\
                            <slot name="todo-items"></slot>\
                        </ul>\
                    </div>'
    });
    Vue.component("todo-title",{
        props: ['title'],
        template: '<div>{{title}}</div>'
    });
    Vue.component("todo-items",{
        props: ['item'],
        template: '<li>{{item}}</li>'
    });
    var vm = new Vue({
        el : "#app",
        data: {
            title:'小明学习计划',
            todoItems: ['小明学Java','小明学前端','小明学Linux']
        }
    });
</script>
</body>
</html>

 

自定义事件

  通过以上代码不难发现,数据项在Vue的实例中,但删除操作要在组件中完成,那么组件如何才能删除Vue实例中的

数据呢?此时就涉及到了参数传递与事件分发了,Vue为我们提供了自定义时间的功能很好的帮助我们解决了这个问题,

使用this.$emit('  自定义事件名 ',参数),操作过程如下:

1.在vue实例中,增加了methods对象并定义了一个名为removeItems的方法

 

 2.在组件中定义删除按钮以及remove方法

 

 3很明显我们只要在这里能调用到vue实例中的removeItems方法就好了,这个时候我们就需要用到this.$emit('  自定义事件名 ',参数)

 

 4.上面的参数'  remove '是自定义事件名,在试图进行的绑定。

 

 我们看到,我们绑定了下标,事件。这里我们自定义remove绑定vue实例中的removeItems方法,而组件中的remove方法又绑定

了这里的remove,这样就实现了,在组件中调用vue实例的方法。即实现了在组件中完成删除vue实例中数据的操作

标签:分发,Vue,自定义,title,插槽,内容,组件,todo
From: https://www.cnblogs.com/zhulei118/p/16965407.html

相关文章