首页 > 其他分享 >VUE框架CLI组件化全局事件总线实现原理------VUE框架

VUE框架CLI组件化全局事件总线实现原理------VUE框架

时间:2023-12-10 16:03:31浏览次数:33  
标签:VUE console log 框架 函数 name user event1 CLI

<template>
	<div>
		<!-- 内置函数的实现步骤 -->
		<!-- 提供事件源,给事件源绑定事件,编写回调函数,将回调函数和事件进行绑定 -->
		<!-- 等待事件的触发,事件触发执行回调函数 -->
		<!-- 组件的自定义事件实现步骤 -->
		<button @click="Hello()">你好</button>
		<!-- 给User组件绑定自定义事件 -->
		<!-- 全称写法v-on:事件名称简写为@事件名 -->
		<!-- 对于组件自定义事件来说,要想让事件发生,就需要执行一段代码 -->
		<!-- 这段代码负责触发这个事件,让这个事件发生 -->
		<!-- 这个事件绑定在这个VC上 -->
		<User v-on:event1="doSome" @event2="doOther"></User>
		<!-- 简写形式 -->
		<!-- 事件绑定在哪个组件上,触发事件的代码就在哪个组件上编写 -->
		<User @event1="doSome" @event2="doOther"></User>
		<!-- 总结到目前,父子组件如何通信 -->
		<!-- props传值(父组件向子组件),自定义事件(子组件向父组件) -->
		<!-- 在父组件中定义一个方法,将方法传递给子,然后在子组件中触发这个方法,并传递参数 -->
		<!-- 第二种方法,也是更常用的,使用组件自定义事件的方式,也可以完成子向夫传数据 -->
		<!-- 在父组件绑定事件,在子组件触发事件 -->
		<!-- 子组件传递父组件是,父组件绑定,子组件触发(父绑定,子触发) -->
		<User ref="user"></User>
	</div>
</template>
 
<script>
import User from "./components/User.vue"
export default {
	name : "App",
	components : {User},
	mounted(){
		// 当我们的函数是箭头函数,函数的this对象也是父类对象App的vc
		// 如何判断箭头函数的执行者this呢?首先明确,箭头函数没有this
		// 箭头函数执行时需要向外找,上一级的this就是它的this
		this.$refs.user.$on("event1",() => {console.log(this);});
		// 这个也是被触发的当前vc实例,不是app的vc实例
		console.log("mo" + this.$refs.user);
		// 当我们的函数是普通函数,函数体的this是当前vc实例,不是APP组件实例
		this.$refs.user.$on("event1",function(){console.log(this);})
		// 获取组件
		// 给ref=user的组件绑定event1事件,并且给event1这个事件绑定一个回调函数doSome()
		// 以传参的形式让父类执行,this就变成了App这个父类实例
		this.$refs.user.$on("event1",this.doSome);
		this.$refs.user.$on("event2",this.doOther);
		// 如果这里的函数是普通的函数function
		// 或者是箭头函数,应该怎么处理
		// 仅一次的设置方式
		this.$refs.user.$once("event1",this.doSome);
	},
	methods : {
		Hello(){
			console.log("Hello Vue");
		},
		// doSome(name,age,gender){
		// 	console.log(name,age,gender)
		// }
		// 不确定个数,后期拓展写法
		// 仅限ES6的新语法...params
		doSome(name,...prams){
			console.log(name,prams);
			console.log(this);
		},
		doOther(){
			console.log("doOther");
		}
	}
}
</script>
 
<style>
 
</style>
<template>
    <div>
        <!-- 作为一个VC对象,就有$on方法(用于绑定事件)和$emit(用于触发事件)方法 -->
        <!-- 如果是A传数据给B,就是b绑定事件,a触发事件,在方法中传递数据 -->
        <!-- 全局事件总线原理是 -->
        <!-- 创建一个全局的vc对象,利用vc对象都有的$on和$emit -->
        <!-- 传递数据的组件上绑定这个全局vc的$on,而提供数据的组件触发这个全局vc的$emit即可 -->
        <button @click="triggerEvent1()">触发event1事件</button>
        <button @click="triggerEvent2()">触发event2事件</button>
        <button @click="unbinding">解除绑定</button>
        <!-- vue实例销毁的时候,会把我们实例上绑定的事件全部解绑 -->
        <button @click="goodbye()">销毁VUE实例</button>
    </div>
</template> 
 
<script>
export default {
    name : "User",
    methods : {
        triggerEvent1(){
            console.log("tr" + this);
            // 触发事件的方法
            // 代码意思是触发event1这个事件
            // this是当前的组件实例
            // $emit就是触发爆发
            // 这个this是当前vc实例
            this.$emit('event1',this.name,this.age,this.gender);
        },
        triggerEvent2(){
            this.$emit("event2");
        },
        // 解除绑定
        unbinding(){
            // 仅仅解绑this绑定的event1事件
            // this.$off('event1');
            // 全部解绑写法
            // this.$off();
            // 解绑多个写法
            this.$off(["event1","event2"]);
        },
        goodbye(){
            // 销毁完,全部的绑定效果全部失效
            this.$destroy();
        }
    },
    data(){
        return {
            name : "张三",
            age : 20,
            gender : "男"
        }
    }
}
</script>
 
<style>
 
</style>

标签:VUE,console,log,框架,函数,name,user,event1,CLI
From: https://blog.51cto.com/u_16322355/8761425

相关文章

  • [Vue]脚手架创建项目
    文档:https://cli.vuejs.org/zh/(脚手架最新版本是4.x) 1.如果安装速度过慢,可以指到国内安装地址:npmconfigsetregistryhttps://registry.npm.taobao.org2.首次安装(全局):npminstall-g@vue/cli 3.切换到创建项目的目录,使用命令创建项目 vuecreatexxx4.选择使用......
  • 硬件自旋锁框架 【ChatGPT】
    https://www.kernel.org/doc/html/v6.6/locking/hwspinlock.html硬件自旋锁框架简介硬件自旋锁模块为异构处理器和不在单一共享操作系统下运行的处理器之间的同步和互斥提供硬件辅助。例如,OMAP4具有双核Cortex-A9、双核Cortex-M3和一个C64x+DSP,每个处理器运行不同的操作系......
  • Vue 3 使用moment设置显示时间格式
    一.问题:Vue3如何使用moment设置显示时间格式。二.分析问题:在Vue3中,因为过滤器(filter)已经被废弃,取而代之的是全局方法(globalmethod)。slot-scope也被弃用使用v-slot代替。无法使用过滤器设置显示时间格式。三. 解决问题。  (1)在vueui安装moment依赖,搜索安装即可。......
  • vue3学习之createApp(App).mount('#app')
    装了vue-cli之后,新建个项目跑起来了,碰上个没理解的问题,不知道createApp(App).mount('#app')挂载的这个id=“app”从哪冒出来的 用命令创建出来的项目,components/HelloWorld.vue,App.vue,main.js中都没有估摸着得是底层的,网上找一圈,各路大神基本是一句带过,可能是太简单了,没......
  • 使用Vue和Element UI进行文件上传的简单教程
    当使用Vue和ElementUI进行文件上传时,你可以按照以下步骤进行操作:步骤1:安装Vue和ElementUI在你的Vue项目中使用npm或者yarn安装Vue和ElementUI:npminstallvueelement-ui步骤2:创建上传组件创建一个Vue组件来处理文件上传的逻辑。在组件的<template>中添加一个文件上传的按钮和......
  • FunAdmin框架介绍
    FunAdmin是一款基于ThinkPHP6+Layui2.6.x开发的权限(RBAC)管理框架,该框架中集成了权限管理、模块管理、插件管理、后台支持多主题切换、配置管理、会员管理等常用功能模块,旨在方便开发者快速构建自己的应用。FunAdmin框架专注于为中小企业提供最佳的行业基础后台框架解决方案,其执......
  • 【前端框架Vue】Vue是什么?怎么用?
    Vue是JS的一种框架,用于构建用户界面的JS框架。可以理解为,Vue通过指令和模板语法,将数据和HTML模板关联起来,实现一种响应式的数据驱动视图的方式Vue是什么?Vue是JS的一种框架,用于构建用户界面的JS框架。可以理解为,Vue通过指令和模板语法,将数据和HTML模板关联起来,实现一种响应式的......
  • MFC CListVtrl 控件简单测试
    ▲样式Demo关联控件变量m_CList,在属性中将视图(View)设置成Report(报表)模式。在BOOLCMFCApplication4LlisBoxDlg::OnInitDialog()初始化函数中添加测试代码://TODO:在此添加额外的初始化代码//m_CList.SetView(1);//视图View要改成Report报表模式//设置风格样......
  • Vue源码学习(十八):实现组件注册(一)Vue.component()和Vue.extend()
    好家伙, 0.完整代码已开源https://github.com/Fattiger4399/analytic-vue.git 1.思路1.1.什么是组件化? Vue组件化是指将复杂的应用程序拆分成多个独立的、可复用的组件,这些组件可以实现特定的功能或局部功能。组件化有助于提高开发效率、方便重复使用、简化调试步骤......
  • Vue学习之node.js环境下利用Vue-cli脚手架搭建Vue项目
    目录第一个Vue-cli应用什么是vue-cli?vue-cli主要功能:搭建需要的环境1、nvm-windows下载2、安装nvm3、修改nvm环境变量4、通过nvm安装node5、安装全局npm6、一些替代npm的方式安装vue-cli第一个脚手项目配置命令行运行Vue项目IDEA运行Vue项目第一个Vue-cli应用之前练习了Vue一些......