当前位置: 首页 > news >正文

Vue2父子传值

Vue2父子传值

一、父子组件传值的多种方式

1.1父组件调用子组件

  • 通过props
  • 通过ref
  • 通过$children

1.2子组件调用父组件

  • 通过$emit
  • 通过provide/inject
  • 通过$parent

二、父组件调用子组件——使用步骤

1.父组件通过 props 传值,可传属性,方法

代码如下(示例):

父组件

<template><div><h1>父组件</h1><Son1 :parentMethod="mytMethod" :isShow="isShow" /></div>
</template><script>
import Son1 from "./components/son1.vue";export default {name: "test",components: {Son1,},data() {return {isShow: true,};},methods: {mytMethod() {console.log("触发了父组件的方法");this.isShow = !this.isShow;},},
};
</script>

子组件

<template><div><h4>子组件</h4><button @click="parentMethod">点我</button><div v-if="isShow">控制显示</div></div>
</template><script>export default {props:{parentMethod:{type:Function,default:()=>{}},isShow:{type:Boolean,default:false}}}
</script>

2.父组件通过 ref 获取子组件的实例,直接调用子组件的方法。

代码如下(示例):

父组件:

<template><div><h1>父组件</h1><button @click="changeSon1">点我修改子组件显示列表</button><Son1 ref="son1"  /></div>
</template><script>
import Son1 from "./components/son1.vue";export default {name: "test",components: {Son1,},methods: {changeSon1(){let list = ['我是新的列表','哈哈哈']this.$refs.son1.setListData(list)}},
};
</script>

子组件:

<template><div><h4>子组件</h4><ul v-for="(item, index) in list" :key="index"><li>{{ item }}</li></ul></div>
</template><script>
export default {data() {return {list: ["默认"],};},methods: {setListData(listData) {this.list = listData;},},
};
</script>

3.父组件通过 $children 获取子组件的实例的集合。

父组件:

<template><div><h1>父组件</h1><button @click="changeMsg">点我更新子组件</button><Son1 /><Son2 /></div>
</template><script>
import Son1 from "./components/son1.vue";
import Son2 from "./components/son2.vue";export default {name: "test",components: {Son1,Son2,},data() {return {};},                                  methods:{changeMsg(){console.log(this.$children);//[VueComponent, VueComponent] 子组件实例集合this.$children[0].getData();this.$children[1].getData();this.$children[0].msg ='111'console.log(this.$children[0].msg );console.log(this.$children[1].msg);}}
};
</script>

子组件:

<template><div><h4>子组件1</h4><div>{{ msg }}</div></div>
</template><script>
export default {name:"son1",data() {return {msg: "子组件1默认",};},methods: {getData() {this.msg = "子组件1更新";},},
};
</script>
<template><div><h4>子组件2</h4><div>{{ msg }}</div></div>
</template><script>
export default {name:"son2",data() {return {msg: "子组件2默认",};},methods: {getData() {this.msg = "子组件2更新";},},
};
</script>

三、子组件调用父组件——使用步骤

1.子组件通过 $emit 触发父组件方法

代码如下(示例):

子组件

<template><div><h4>子组件</h4><button @click="changeM">点我修改父组件msg</button></div>
</template><script>
export default {data() {return {};},methods: {changeM() {this.$emit("changeMsg", "新的了!辛德瑞拉");},},
};
</script>

父组件

<template><div><h1>父组件</h1><div>{{ msg }}</div><Son1 @changeMsg="changeMsg" /></div>
</template><script>
import Son1 from "./components/son1.vue";export default {name: "test",components: {Son1,},data() {return {msg: "父組件默认值",};},methods: {changeMsg(newVal) {this.msg = newVal;},},
};
</script>

2.provide/inject

代码如下(示例):

父组件

<template><div><h1>父组件</h1><Son1 /></div>
</template><script>
import Son1 from "./components/son1.vue";export default {name: "test",components: {Son1,},data() {return {parentMsg:"eee"};},provide() {return {myMethod: () => this.myMethod(),//响应式方法,绑定thisparentMsg: () => this.parentMsg,//响应式的值,绑定thisparentColor: 'red',//非响应式的值};},methods:{myMethod(){console.log("组件方法被调用");this.parentMsg +="a"}}

子组件:

<template><div><h4>子组件</h4><button @click="myMethod">点我</button>响应式: {{parentMsg()}}非响应式:  {{parentColor  }}</div>
</template><script>
export default {inject: ["myMethod",'parentMsg','parentColor'],data() {return {};},methods: {},
};
</script>

3.$parent 子组件获取父组件的数据、调用父组件的方法

父组件

<template><div><h1>父组件</h1><Son1 /></div>
</template><script>
import Son1 from "./components/son1.vue";export default {name: "test",components: {Son1,},data() {return {parentMsg:"父组件的值"};},                                  methods:{myMethod(){console.log("父组件方法被调用");}}
};
</script>

子组件:

<template><div><h4>子组件</h4><button @click="getData">点我</button><div>{{ msg }}</div></div>
</template><script>
export default {data() {return {msg:"子组件默认"};},methods: {getData(){this.$parent.myMethod()this.msg = this.$parent.parentMsg;}},
};
</script>

注意:如果子组件被第三方组件库包裹,比如vant UI(插槽使用)时,this.$parent获取到的是第三方库组件的实例(多层包裹,不建议使用)。

总结

以上就是今天要讲的内容,本文仅仅简单介绍了父子传值的方式,具体的使用,大家根据具体开发需求使用。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 从0开始搭建一个SpringBoot项目(从环境配置到运行项目)
  • 网络协议(概念版)
  • 【java计算机毕设】学生选课系统小程序MySQL ssm vue uniapp maven项目设计源代码带文档PPT 寒暑假小组课后作业
  • Camunda BPMN 基础组件
  • 汽车的UDS诊断01
  • 深入解析HarmonyOS中的媒体查询及其高级用法
  • 基于spring boot的小型诊疗预约平台的设计与开发
  • k8s rbd image replicapool/xxx is still being used
  • 虚拟机桥接模式下设置静态IP
  • 开始尝试从0写一个项目--前端(四)
  • 阿里云代码库 绑定git使用指引
  • 用博达网站群管理平台设计网站时如何创建二级导航
  • ​Redis 实现计数器和限速器的
  • 【AI学习】人工智能的几种主义
  • 【芯智雲城】类比半导体模拟及数模混合芯片应用和选型指导
  • JS 中的深拷贝与浅拷贝
  • 【跃迁之路】【477天】刻意练习系列236(2018.05.28)
  • ➹使用webpack配置多页面应用(MPA)
  • Docker容器管理
  • FastReport在线报表设计器工作原理
  • Flex布局到底解决了什么问题
  • Javascript编码规范
  • JavaScript函数式编程(一)
  • Java程序员幽默爆笑锦集
  • JDK 6和JDK 7中的substring()方法
  • JS基础篇--通过JS生成由字母与数字组合的随机字符串
  • LeetCode541. Reverse String II -- 按步长反转字符串
  • Synchronized 关键字使用、底层原理、JDK1.6 之后的底层优化以及 和ReenTrantLock 的对比...
  • WinRAR存在严重的安全漏洞影响5亿用户
  • 设计模式 开闭原则
  • ​软考-高级-信息系统项目管理师教程 第四版【第19章-配置与变更管理-思维导图】​
  • ​探讨元宇宙和VR虚拟现实之间的区别​
  • # 利刃出鞘_Tomcat 核心原理解析(八)-- Tomcat 集群
  • #QT(一种朴素的计算器实现方法)
  • #进阶:轻量级ORM框架Dapper的使用教程与原理详解
  • (4) PIVOT 和 UPIVOT 的使用
  • (C语言)strcpy与strcpy详解,与模拟实现
  • (delphi11最新学习资料) Object Pascal 学习笔记---第2章第五节(日期和时间)
  • (LeetCode C++)盛最多水的容器
  • (MTK)java文件添加简单接口并配置相应的SELinux avc 权限笔记2
  • (Redis使用系列) SpirngBoot中关于Redis的值的各种方式的存储与取出 三
  • (ZT)出版业改革:该死的死,该生的生
  • (附源码)spring boot基于小程序酒店疫情系统 毕业设计 091931
  • (四)库存超卖案例实战——优化redis分布式锁
  • (转载)Google Chrome调试JS
  • *p++,*(p++),*++p,(*p)++区别?
  • . NET自动找可写目录
  • .Net - 类的介绍
  • .NET 8.0 中有哪些新的变化?
  • .net 重复调用webservice_Java RMI 远程调用详解,优劣势说明
  • .NET/C# 阻止屏幕关闭,阻止系统进入睡眠状态
  • .Net调用Java编写的WebServices返回值为Null的解决方法(SoapUI工具测试有返回值)
  • .NET建议使用的大小写命名原则
  • .NET学习全景图
  • .net专家(张羿专栏)