IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> Vue组件之间的多种通信方式 $emit和props、mapState和mapMutations、$ref和$refs -> 正文阅读

[JavaScript知识库]Vue组件之间的多种通信方式 $emit和props、mapState和mapMutations、$ref和$refs

Vue组件间的通信方式 $ emit props、mapState、mapMutations 、$attr $ref 和 $refs

在使用Vue进行复杂组件开发的时候,难免会遇到组件间的传递的问题,下面是几种常见的组件通信方式、第一种emit、prop 配合是最常用的方式,另外还有就是 r e f 和 ref 和 refrefs进行控制,还有就是通过缓存机制的Vuex 的mapMutationsmapState 进行同步通信

一、父组件与子组件之间传递 prop 传递数据 $emit 事件(单双层页面传递)

一般简单的页面,我们用prop和emit,单个页面的时候使用,父组件通过prop 将父组件数据进行传递到子组件,子组件 通过$emit自已的事件, 多层也可以用,但是不推荐使用会影响效率
具体代码实现代码
在这里插入图片描述

// 父组件  id 就是对应子组件的props里的值    clo函数就是接受子组件上的@close 事件,        
	<ProjectDetail  :id="projectDetailId"  @close='clo'></ProjectDetail>
	clo(e){
		console.log(e)   //输出 '关注点赞走一走'
	}	
-----------------------------------------------------------------------------------------------------------
// 子组件   在props中定义id  使用时用this.id 即可
export default {
		props: { id: String },
}
//  在自定义函数里 调用 this.$emit()     第一个参数为函数绑定名称 ,后面的参数均为变量,变量 传递事件过去
cancel() {
	this.$emit('close','关注点赞走一走');
}
-----------------------------------------------------------------------------------------------------------

二、不同页面相互之间通信 ,Vuex的 mapState mapMutations(多页面公用)

在这里插入图片描述

首先Vux 的原理是同步执行的,就是你的赋值会同步进行,这样所有的页面都可以通过vuex 进行使用,mapMutations 是用来设置值的,mapState 是用来获取值的

第一步我们需要在store 文件夹下定义自己的 task.js ,文件ask 文件夹代码如下

const taskState = {
	// 解决不同模块命名冲突问题
	namespaced: true,
	//用于定义
	state: {
		lrpId: "11'', //项目ID
	},.
	// 用于设置变量的函数
	mutations: {
		setLrpId(state, value) {
			state.lrpId = value;
	},
	//用于获取
	getters: {
		getLrpId: (state) => state.lrpId,
	},
	actions: {},
	modules: {}
};
export default taskState;

第二步 将自定义文件task 引入store下的index.js全局
我们需要把自己的文件绑定到vue 上,并且为它创建vuex实例

import task from './taskManagement';
Vue.use(Vuex);
export default new Vuex.Store({
	modules: { test, task }
});

第三步 在需要使用的页面 通过 createNamespacedHelpers 将对应的方法引入
我们通过Vuex里的createNamespacedHelpers 方法创建 mapState 和 mapMutations

//按照需求引入 自己的定义的文件夹
import { createNamespacedHelpers } from 'vuex';
const { mapState } = createNamespacedHelpers('task');
const { mapMutations } = createNamespacedHelpers('task');

export default {
	computed: {
		...mapState({
			//获取vuex里state数据
			taskManagement: (state) => state
		}),
	},
	methods: {
		//引入vuex 里mutations 方法
		...mapMutations(['setLrpId']),
		}
}

第四步使用
使用上面引入的方法即可

		// 获取task 文件下 state定义的lrpId的初始值
		console.log(this.taskManagement.lrpId)  //打印为11
		//进行赋值为22
		this.setTaskId('关注点赞走一走');
		// 获取task 文件夹里state 的值     ( )
		console.log(this.taskManagement.lrpId)  //打印为 '关注点赞走一走'

三、通过dom 进行通信$ref 和 $refs 方法 (父组件对子组件的控制)

在这里插入图片描述

这种方式的好处是避免数据不刷新问题 ,父组件可以通过$ refs 直接调用子组件身上的data(){}变量里的数据 已经methods 里的方法

 //father页面
 <son ref="son"></son>
 created(){
 	//获取数据	
 	console.log(this.$ref.son.value)   //输出  '关注点赞走一走'
 	// 调用方法  
 	this. $ refs. print()     // 输出 打印方法'关注点赞走一走'
 }
 --------------------------------------------------------------------------------------------
//son页面
export default {
   data(){
   reture:{ 
   value:''关注点赞走一走'
   }
   },
   methods: {
   	print(){
   		console.log('打印方法'+this.value)
   	}
   }
}
  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2022-05-24 18:03:56  更:2022-05-24 18:06:31 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 20:42:19-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码