网站首页 > 博客文章 正文
今天有一个问题
父组件 A 中有 两个 子组件 A1 A2;
在 A1 和A2 中 监听 父组件的 a 变量 ,当a变量更新时
A1 和 A2 同时(?存疑)向父组件 emit change事件 分别传值 1 和 2,父组件接收事件后更改 自身 b变量,
上诉过程发生后 A组件的b变量 是 1 还是2
怎么说都不如实践,毕竟实践是检验真理的唯一标准
首先打开vsCode 然后打开终端,输入:
vue create test-emit
选择一个vue2的项目新建。
app.vue
<template>
<div>
我是父组件{{ datas }}
<A1 @datasChange="change" v-bind:datas="datas" />
<A2 @datasChange="change" v-bind:datas="datas" />
<button @click="datas=datas-1">点我改变data</button>
</div>
</template>
<script>
import A1 from "./components/A1.vue";
import A2 from "./components/A2.vue";
export default {
name: "App",
components: {
A1,
A2,
},
data() {
return {
datas: 0
}
},
methods:{
change(e){
this.datas = e
}
}
};
</script>
<style>
</style>
在components目录下新建一个A1.vue 和A2.vue文件
A1.vue
<template>
<div style="display: flex">我是A1组件{{ datas }}</div>
</template>
<script>
export default {
name: "A1",
props: {
datas: Number,
},
watch:{
datas(val){
console.log("a1监听到了变化",val)
this.$emit('datasChange',1)
}
}
};
</script>
A2.vue
<template>
<div style="display: flex">我是A2组件{{ datas }}</div>
</template>
<script>
export default {
name: "A2",
props: {
datas: Number,
},
watch:{
datas(val){
console.log("a2监听到了变化",val)
this.$emit('datasChange',2)
}
}
};
</script>
然后输入命令
cd test-emit //进入项目目录
yarn serve // 如果你使用的是Yarn
npm run serve // 如果你使用的是Npm
项目运行界面
点击按钮后
看下控制台
调换位置
运行结果
控制台
结论
我们观察到了运行的顺序,同样我们知道了一个结论。关于vue的watch的。
就是如果两个组件同时watch。那么一定是在上边的先监听到watch事件。
然后修改了值。然后第二个组件才能监听到watch事件。然后再进行改变。
才会再次修改。但是他们没有我想象中的来回修改。我相信。应该是在vue源码中有相关的保护。防止多次触发。导致页面卡死。
猜你喜欢
- 2024-09-14 Vue+Element UI实现断点续传、分片上传、秒传
- 2024-09-14 Vue3-笔记十.5(透传Attributes)(vue组件穿透什么意思)
- 2024-09-14 写 Vue 我建议非必要别用 watch(vue不用写html吗)
- 2024-09-14 一文看完vue3的变化之处(vue3稳定吗)
- 2024-09-14 vue中的v-model刨根问底(vue v-model.lazy)
- 2024-09-14 「面试题」如何去掉vue的url地址中的#号?及其原理?
- 2024-09-14 Vue进阶(七十一):webpack实现一键动态切换主题色
- 2024-09-14 vue2组件系列第三十七节:Collapse 折叠面板
- 2024-09-14 前端知识点总结——Vue(前端面试题2021及答案vue)
- 2024-09-14 无意中发现 Vue3 的小技巧,帮我节省很多代码
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- powershellfor (55)
- messagesource (56)
- aspose.pdf破解版 (56)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- ubuntu升级gcc (58)
- nacos启动失败 (64)
- ssh-add (70)
- jwt漏洞 (58)
- macos14下载 (58)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- vue回到顶部 (57)
- qcombobox样式表 (68)
- vue数组concat (56)
- tomcatundertow (58)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)