首页 > 其他分享 >前端开发系列051-基础篇之自定义事件和插槽(Vue)

前端开发系列051-基础篇之自定义事件和插槽(Vue)

时间:2022-12-12 10:14:49浏览次数:55  
标签:slot Vue 自定义 插槽 标签 组件 051

title: 前端开发系列051-基础篇之自定义事件和插槽(Vue)
tags:
categories: []
date: 2017-12-14 00:00:00

本文是早期学习Vue整理的一些阶段性总结,内容主要关于Vue框架中组件的事件传递和插槽。

一、组件通信(自定义事件)

组件间通信主要涉及到两方面的内容,即父组件(父级标签)向子组件传递数据以及子组件通过自定义事件的方式来反馈给父组件。

数据的传递我们只需要在组件中使用props属性来记录和接收需要的内容即可,这里简单通过代码示例的方式说明下自定义事件。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="../../Vue/vue.min.js"></script>

</head>
<body>
<div id="demoID">
    <button-custom @countereventfunction="totalEventFunction()"></button-custom>
    <button-custom @countereventfunction="totalEventFunction()"></button-custom>
    <div>按钮被点击的总次数为 {{total}}</div>
</div>
<template id="button_custom">
    <button @click="countereventfunction">点击了当前按钮的次数为:{{counter}}</button>
</template>
<script>
    //实例化组件
    Vue.component("button-custom",{
        template:"#button_custom",
        data:function () {
            return {
                counter:0
            }
        },
        methods:{
            countereventfunction:function () {

                //执行标签的点击事件(先把计数器 + 1)
                this.counter += 1;

                //发出通知 表示counterEventFunction方法已经被点击
                this.$emit("countereventfunction");
            }
        }
    });

    //创建实例化Vue对象
    new Vue({
        el: "#demoID",
        data: {
            total: 0
        },
        methods: {
            totalEventFunction: function () {
                console.log("___");
                this.total += 1;
            }
        }
    });

</script>
</body>
</html>

上面的代码中我们在组件中编写了一个按钮标签,该标签在点击的时候能够更新按钮的内容 counter计数器加1、另外我们还有一个标签用来统计页面中所有按钮被点击的次数,这就要求每次组件中标签的点击事件被触发的时候父级标签应该收到通知,我们通过this.$emit方法来实现。

代码的执行结果为:

注意:在使用v-on标签或者是其语法糖@的时候,函数的名称不支持驼峰标识命名的方式。

二、插槽(内容分发)

插槽的简单说明:Vue 实现了一套内容分发的 API,这套 API 基于当前的 Web Components 规范草案,将 元素作为承载分发内容的出口。

插槽分成两种,有名称的插槽没有名称的插槽,因此也称为具名插槽和匿名插槽。

插槽的使用切入点是什么?

我们注册好组件之后,在使用组件的时候使用的自定义标签对,在这个标签对中可以有内容。

如果在定义组件的时候,我们在组件中预留了元素,那么页面在渲染的时候会使用自定义标签中的内容来替换组件中的slot元素。

下面给出匿名插槽和具名插槽使用的代码示例:

匿名插槽示例

<div id="demoID">
    <my-slot>
        <p>我是插槽的内容 p标签</p>
        <div>我是插槽的内容  div标签</div>
        <input type="date">
    </my-slot>
    <hr>
    <my-slot></my-slot>
</div>
<template id="my_slot">
    <div>
    <h1>示例代码的头部标题</h1>
    <!--在组件的头部和底部中间的内容是不确定的-->
    <!--这个预留一个没有名称的插槽:匿名插槽-->
    <!--slot标签中可以有具体的内容,如果在使用组件的时候自定义标签中有内容,那么则替换slot中的部分-->
    <slot>预留的插槽出口</slot>
    <footer>示例代码的底部标签</footer>
    </div>
</template>
<script>
    //组件实例化
    Vue.component("my-slot",{
        template:"#my_slot"
    })

    new Vue({
        el:"#demoID"
    })
</script>

代码在运行的时候,组件中预留的slot标签会被自定义标签my-slot(组件)内部的标签完成替换。

具名插槽代码示例

v id="demoID">
    <my-slot>
        <div slot="cpu">Core i8 </div>
        <div slot="memory">64GB内存条</div>
        <div slot="store">我是存储相关的插槽信息1</div>
        <div slot="store">我是存储相关的插槽信息2</div>
        <div slot="hard-drive">1TB的固态硬盘</div>
    </my-slot>
</div>
<template id="my_slot">
    <div class="main">
        <slot name="cpu">我是cpu插槽</slot><br>
        <slot name="memory">我是memory插槽</slot><br>
        <slot name="store">我是存储插槽</slot><br>
        <slot name="hard-drive">我是硬盘插槽</slot><br>
    </div>
</template>
<script>
    //组件实例化
    Vue.component("my-slot",{
        template:"#my_slot"
    });

    //创建Vue实例对象
    new Vue({
        el:"#demoID"
    })
</script>

代码的执行结果为:

标签:slot,Vue,自定义,插槽,标签,组件,051
From: https://www.cnblogs.com/wendingding/p/16975340.html

相关文章

  • 前端开发系列050-基础篇之组件的概念和使用(Vue)
    title:'前端开发系列050-基础篇之组件的概念和使用(Vue)'tags:categories:[]date:2017-12-0901:00:00本文是早期学习Vue整理的一些阶段性总结,内容主要关于Vue框......
  • 前端开发系列049-基础篇之VueRouter
    title:'前端开发系列049-基础篇之VueRouter'tags:-网络编程系列categories:[]date:2017-12-0601:00:00VueRouter路由MPA(多)页面应用(MultiplePageAppl......
  • 前端开发系列048-基础篇之Vue的基础指令
    title:'前端开发系列048-基础篇之Vue的基础指令'tags:categories:[]date:2017-12-0201:00:00本文介绍Vue框架中涉及的基础指令。一、基础指令简单总结下Vue中......
  • 前端开发系列047-基础篇之Vue的安装和初始化
    title:前端开发系列047-基础篇之Vue的安装和初始化tags:categories:[]date:2017-12-0100:00:00本文介绍Vue项目的安装和初始化等内容。一、Vue框架安装我们在......
  • 那些你不知道的 CSS 自定义形状网格布局 3
    本文翻译自CSSGridandCustomShapes,Part3,略有删改原作者:TemaniAfif基于CSS自定义网格已发布第一部分和第二部分,本文将开始第三部分探讨更多的奇特自定义形状,与......
  • vue scroll事件
    handleScroll(e){constscrollTop=e.target.scrollTopconstwindowHeight=e.target.clientHeightconstscrollHeight=e.target.scrollHe......
  • vue 页面内复印窗口
    vuehtml代码<divid="printArea"ref="printArea"class="printArea"><divclass="positiveItem"><img:src="idC......
  • Vue基础(四)
    vue生命周期函数介绍引入场景:呈现文字透明渐隐的效果......<body><divid="container"><!--值必须写成对象式,在js中,若键值对名称一样,则可以简写--......
  • 自定义RBAC(4)
    您好,我是湘王,这是我的博客园,欢迎您来,欢迎您再来~ 前面把RBAC的权限系统设计过程都讲清楚了,现在就来实现它。大致分这么几个步骤:1、先定义出完整的权限系统表结构;2、实......
  • vue3+element plus封装一个Drawer抽屉组件
    在开发中,我们经常使用vue2封装一些弹窗、抽屉组件,但是vue3的用法与vue2又不同,记录下本次使用vue3基于elementplus封装的一个抽屉组件开发思路是,关闭和打开抽屉组件的方......