vue-----组件通信/传值

news/2024/5/3 17:36:44/文章来源:https://blog.csdn.net/m0_46677484/article/details/127055630

一 父子组件通信分为父给子传和子给父传

父给子传:

1.在子组件标签中写传入的值

2.在子组件内使用props接收父组件传递的值。

子给父传:

 1.在子组件内部使用$emit发射自定义事件和传递给父组件的值
  2.在父组件内声明自定义事件接受参数

二 兄弟组件通信

      1.声明一个事件总线Bus.js  
            export default new Vue();
        2.引入事件总线
            import Bus from 'xx.js'
            //vue.prototype.$emit()
            使用总线$emit发射数据出去
            Bus.$emit(自定义事件名称,发射的数据)
        3.引入事件总线    
            Bus.$on(自定义事件名称,(形参--->发射得数据)=>{

            })

三 祖孙组件传值


    1.由祖先组件使用provide方法传递数据
    provide(){
        return {"msg":this.msg}
    }
    2.由子孙组件使用inject注入数据
    inject:["msg"]


一 父子组件通信

1.1父给子传:

1.在子组件标签中写传入的值

2.在子组件内使用props接收父组件传递的值。

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><script src="https://cdn.jsdelivr.net/npm/vue@2.7.10/dist/vue.js"></script></head>
<body><div id="app"><!-- 动态传参 : -->      <!-- 静态传参  --><my-child :age="18"  obj="{name:莉莉}" num="888"></my-child></div><script>let child={props:{// 子组件可以对父组件的传值进行类型校验age:Number,obj:String,num:{// 可以进行多个类型之的校验type:[Number,String,Boolean],// 自定义校验器规则validator(val){return val>100}},// 默认值stu:{type:Array,default(){return [2,5,8]}}},template:`<div>我是子组件{{age}}----{{typeof obj}}{{obj}}----{{typeof obj}}{{num}}----{{typeof num}}{{stu}}----{{typeof stu}}</div>`,data(){return{}},};new Vue({components:{'my-child':child},el:"#app",data:{msg:'我是父组件'},methods:{}})</script>
</body>
</html>

 1.2 子给父传:

 1.在子组件内部使用$emit发射自定义事件和传递给父组件的值
  2.在父组件内声明自定义事件接受参数

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><script src="https://cdn.jsdelivr.net/npm/vue@2.7.10"></script>
</head>
<body><div id="app"><!-- 2. 在父组件中使用子组件的标签定义 自定义事件 --><my-child @my-event="handler"></my-child></div><script>let child={template:`<div>我是子组件<button @click='toSend'>子传值给父</button></div>`,data(){return{msg:'我是子组件-----我要给父组件传值'}},methods:{toSend(){// 1.组件给父组件传值 通过$emit 发射(自定义事件) // $emit('发射事件的名称',传递的参数)  发射事件this.$emit('my-event',this.msg)}}}new Vue({components:{'my-child':child},el:"#app",data(){return{msg1:'我是父组件'}},methods:{handler(a){console.log(a,'这是子组件的值')}}})</script>
</body>
</html>

二 兄弟组件通信

2.1声明一个事件总线 Bus.js

import Vue from 'vue';
export default new Vue();

2.2 引入事件总线

import Bus from 'xxx.js'

使用事件总线发射事件$emit发射数据出去

Bus.$emit(自定义事件名称,发射的数据)

2.3引入事件总线

Bus.$on(自定义事件的名称,(形参--就是发射的数据)=>{
})

Brother1:

<template><div>{{msg1}}<button @click="handler">传值给Brother2</button></div>
</template>
<script>// 导入事件总线import Bus from '../eventBus';
export default {data(){return{msg1:'这是Brother1组件',Brother2:'这是兄弟组件Brother2'}},methods:{handler(){// 1.兄弟组件使用$emit 发射事件Bus.$emit('toBother',this.Brother2)}}
}
</script>

Brother2:

<template><div>{{msg2}}</div>
</template>
<script>import Bus from '../eventBus'
export default {data(){return{msg2:'Brother2组件'}},created(){Bus.$on('toBother',(a)=>{console.log(a,'这是Bother1传给我的值');})}
}
</script>

App:

<template><div id="app"><img alt="Vue logo" src="./assets/logo.png" /><Brother1/><hr /><Brother2/></div>
</template><script>
import Brother1 from './components/Brother1.vue';
import Brother2 from './components/Brother2.vue'
export default {name: "App",components: {Brother1,Brother2 },data(){return {}},};
</script><style>
#app {font-family: Avenir, Helvetica, Arial, sans-serif;-webkit-font-smoothing: antialiased;-moz-osx-font-smoothing: grayscale;text-align: center;color: #2c3e50;margin-top: 60px;
}
</style>

三  祖孙组件通信

3.1由祖先组件使用provide方法传递数据

provide(){
return{"msg":this.msg}
}

3.2 由子孙组件使用inject注入数据

inject:["msg"]

 孙组件 Brother1Child:

<template><div>{{msg4}}----age:{{age}}----{{msg}}----num:{{num}}<button @click='age=30'>点击子组件修改父组件age的值</button><hr></div>
</template>
<script>
export default {data(){return{msg4:'Brother1组件的子组件'}},// 注入数据 injectinject:['msg','num'],props:['age']
}
</script>

父组件  Brother1

<template><div><Brother1Child :age='age' />Brother1 age:{{age}}<button @click="age=22">点击父组件修改子组件age</button></div>
</template>
<script>// 导入事件总线import Bus from '../eventBus';import Brother1Child from './Brother1Child';
export default {components:{Brother1Child},data(){return{msg1:'这是Brother1组件',age:18}},}
</script>

祖先组件 Grandfather

<template><div id="app"><img alt="Vue logo" src="./assets/logo.png" /><Brother1/></div>
</template><script>import Brother1 from './components/Brother1.vue';export default {name: "App",components: {Brother1,},data(){return {msg:'我是祖先组件',num:888}},// 祖先组件使用provide方法提供传递得数据provide(){return {"msg":this.msg,"num":this.num}}
};
</script><style>
#app {font-family: Avenir, Helvetica, Arial, sans-serif;-webkit-font-smoothing: antialiased;-moz-osx-font-smoothing: grayscale;text-align: center;color: #2c3e50;margin-top: 60px;
}
</style>

 

单向数据流(数据更改的方向):

点击父组件修改子组件age:

点击子组件修改父组件age的值   出现了报错

单向数据流(数据更改的方向)小结:

父组件可以改给子组件的数据
子组件不可以改父组件的数据

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_14343.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

真无线蓝牙耳机哪款音质最好?真无线蓝牙耳机音质排行榜

随着蓝牙技术的飞速发展&#xff0c;很多耳机的质量和质量都很好。喜欢音乐的人&#xff0c;往往会沉迷于这种美妙的感觉&#xff0c;也正是因为如此&#xff0c;他们才会对音质有更高的要求。除了音质之外&#xff0c;还有很多新的特性&#xff0c;例如主动降低噪音、声音操控…

全流程调度

目录 Azkaban 配置mysql 配置 Executor Server 配置Web Server Sqoop导出脚本 Azkaban 安装azkaban并改名 配置mysql 启动 [doudouhadoop102 ~]$ mysql -uroot -p123456登陆 MySQL&#xff0c;创建 Azkaban 数据库 mysql> create database azkaban;设置密码有效长度 …

一文入门Qt Quick

很高兴可以来到这一章,终于可以开始讲讲最近几年Qt的热门技术Quick这一块了。希望通过这个比较简短的例子可以带领有兴趣的朋友快速跨过Qt Quick的入门这道槛!以下内容为本人的著作,如需要转载,请声明原文链接 微信公众号「englyf」https://www.cnblogs.com/englyf/p/16733…

m基于matlab的光通信的信道估计,均衡,抑制papr误码率仿真,对比ZF,RLS,MMSE三种算法(包括matlab仿真录像)

目录 1.源码获取方式 2.算法描述 3.部分程序 4.部分仿真图预览 1.源码获取方式 使用版本matlab2013b 获取方式1&#xff1a; 点击下载链接&#xff08;解压密码C123456&#xff09;&#xff1a; m基于matlab的光通信的信道估计&#xff0c;均衡&#xff0c;抑制papr误码…

libxml编译时问题解决记录

在对libxml进行模糊测试时&#xff0c;需要先将其拉去并进行编译&#xff0c;可参考此链接&#xff1a;magma本地编译 或者直接参考这个链接&#xff1a;magma编译libxml2 然而在编译的过程中&#xff0c;拉去完libxml2执行到这一句时报错如下&#xff1a; configure.ac:42: e…

Python骚操作,实现驾考自动答题,这就直接满分了?

Python骚操作来了~ 用Python来实现科目一/四自动答题&#xff0c;100分不要太简单&#xff01; 最初是表弟最近想买车&#xff0c;但是驾照都没有&#xff0c;买什么车&#xff0c;只能先考驾照~ 看他在网页上练习题目慢吞吞的&#xff0c;我就看不下去了&#xff0c;直接给他…

《数据结构》队列及其经典面试题

前言 上一篇讲了栈和栈的经典面试题&#xff0c;链接如下&#xff1a; 栈与栈的经典面试题 其实栈和队列是一码事&#xff0c;都是对只能再线性表的一端进行插入和删除。 因此&#xff0c;其实栈和队列可以互相转换&#xff01; 一、队列的特点 先进先出的数据结构&#…

Android系统安全 — 2.0-移动终端栈溢出的保护机制设置

简介 操作系统提供了许多安全机制来尝试降低或阻止缓冲区溢出攻击带来的安全风险。例如 NX/DEP、 ASLR&#xff08;PIE&#xff09;、CANARY、FORTIFY、RELRO 等手段。 栈保护 1.NX/DEP Linux 和 Windows 平台都支持对非可执行代码的保护&#xff0c;在 Linux 平台中被称为…

【Mybatis框架】初识Mybatis

CSDN话题挑战赛第2期 参赛话题&#xff1a;学习笔记 MyBatis1、MyBatis简介1.1、MyBatis历史1.2、MyBatis特性2. 搭建MyBatis2.1 创建一个Maven项目2.2 在项目下新建我们的MyBatis项目2.3 引入依赖2.4 创建MyBatis的核心配置文件2.5 创建mapper接口2.6 创建MyBatis的映射文件2.…

AWS 中文入门开发教学 34- MySQL@RDS - 准备工作 - VPC子网,安全组,DB子网组,参数组,选项组

知识点 建立RDS MySQL前的准备工作实战演习 VPC子网,安全组,DB子网组,参数组,选项组 VPC子网 Name: deeplearnaws-db-1cCIDR: 172.16.21.0/24 安全组 Name: deeplearnaws-db-sg <- 可以直接使用之前创建的,但生产环境时应只保留3306端口 DB子网组 Name: deeplearnaws-db-su…

JavaScript学习Day008(jQuery操作)

DOM操作分类 DOM操作分为三类 DOM Core&#xff1a;任何一种支持DOM的编程语言都可以使用它&#xff0c;如getElementById() HTML-DOM&#xff1a;用于处理HTML文档&#xff0c;如document.forms CSS-DOM&#xff1a;用于操作CSS&#xff0c;如element.style.color"gree…

【NLP】第12章 检测客户情绪以做出预测

&#x1f50e;大家好&#xff0c;我是Sonhhxg_柒&#xff0c;希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流&#x1f50e; &#x1f4dd;个人主页&#xff0d;Sonhhxg_柒的博客_CSDN博客 &#x1f4c3; &#x1f381;欢迎各位→点赞…

JavaScript数组与对象

数组对象 「创建数组的两种方式」 1. 字面量方式var arr [1,"test",true];2. 实例化数组对象 new Array() var arr new Array(); 注意&#xff1a;上面代码中arr创建出的是一个空数组&#xff0c;如果需要使用构造函数Array创建非空数组&#xff0c;可以在创建数…

SpringCloud-19-Spring Cloud Hystrix介绍和服务端降级

8 Hystrix&#xff1a;Spring Cloud服务熔断与降级组件 8.1 分布式系统面临的问题 复杂分布式体系结构中的应用程序往往由多个服务组成&#xff0c;这些服务之间相互依赖&#xff0c;依赖关系错综复杂&#xff0c;每个依赖关系在某些时候将不可避免的失败&#xff01; 若一个…

最优化理论与方法2

凸优化问题&#xff1a; 对于最优化问题P&#xff1a; min f(x1, x2 , …,xn) s.t. : gi ( x1 , x2 , … , xn) < 0 , i 1 , … , m hi ( x1 , x2 , … , xn) 0 ,i 1 , … , l 1 . 记可行域为S { x ∈ Rn | gi(x)<0 , i1,…,m , hi(x)0 , i 1 , … , l.} 2.当f(x…

交通流域关键词

关键词&#xff1a; ●交通拥堵&#xff1a;traffic jam 或 traffic congestion ●元胞传输模型&#xff1a;cellular transport model 或 cell transport model(细胞传输模型) ●元胞自动机&#xff1a;cellular automata ●VSL(可变速度限制)&#xff1a;variable speed …

Python3 安装软件出现 cl.exe failed with exit status 2 错误

最近因项目需要&#xff0c;开始深入接触python。遇到的一些环境问题&#xff0c;分享下。 requirements.txt中包含一系列所需组件&#xff0c;部分组件安装会报cl.ext错误。 如错误问题&#xff1a;Python3 安装pycrypto 2.6.1 出现 cl.exe failed with exit status 2 错误 …

Android国际化多语言切换

关于App国际化&#xff0c;之前有讲到国际化资源、字符换、布局相关&#xff0c;想要了解的猛戳用力抱一下APP国际化。借着本次重构多语言想跟大家聊一下多语言切换&#xff0c;多语言切换对于一款国际化App来讲是重中之重&#xff0c;并非难事&#xff0c;但是若要做好也是一件…

LeetCode-136-只出现一次的数字

1、哈希表 利用哈希表记录每个元素和其出现的次数&#xff0c;最后遍历哈希表找到只出现一次的数字。缺点在于额外空间为O(n)O(n)O(n)。 class Solution { public:int singleNumber(vector<int> &nums) {unordered_map<int, int> hs;for (auto i: nums) {hs[…

疫情下低代码平台将是企业的曙光

全球疫情的爆发&#xff0c;加速了企业数字化转型进程&#xff0c;为了响应不断变化和增加的业务需求&#xff0c;需要充足的资金以及专业的开发人员才能够有效推行数字化管理。然而在这样的情景下&#xff0c;人员的缺少&#xff0c;时间的效率等问题&#xff0c;导致很多企业…