angular移除事件绑定事件绑定_Vue.js子组件利用事件向父组件传输数据,以及sync修饰符和双向绑定...

24a1aba8458be2561d39673c1b5ace05.png

在Vue.js的组件中,prop是“单向绑定”的,数据只能从父组件传输到子组件。Vue文档中的说了这样做的原因:

所有的 prop 都使得其父子 prop 之间形成了一个单向下行绑定:父级 prop 的更新会向下流动到子组件中,但是反过来则不行。这样会防止从子组件意外变更父级组件的状态,从而导致你的应用的数据流向难以理解。

用自定义事件向父组件发送数据

但是有时候的确需要由子组件从父组件获取更新的数据,这时候一个相对简单的方法就是——自定义事件。父组件监听事件,在事件的回调函数中得到数据。子组件emit事件,同时发送数据。

父组件

<template><div id="app"><HelloWorld @click="clickData" /><div> {{abc}} </div></div>
</template><script>
import HelloWorld from "./components/HelloWorld.vue";
export default {name: "App",components: {HelloWorld,},data() {return {abc: 123}},methods: {clickData (value) {this.abc = value}},
};
</script>

子组件

<template><div class="hello"><button @click="clickadd">按下</button></div>
</template><script>
export default {name: 'HelloWorld',methods: {clickadd () {this.$emit('click', '456')}}
}
</script>

按下按钮前:

3a87e9c710be2352dbbdc518e0a5fdff.png

按下按钮后:

6a7d462c34c602f0c07f6ca33a9254fb.png

123和456表示的是父组件中变量abc的值,子组件按下按钮时,调用了this.$emit,第一个参数表示时间名,第二个参数就可以传递想要发送到父组件的数据了。

父组件这边则在子组件的html标签上监听同名的事件(@click="clickData"),编写回调函数接收值并赋值给变量abc。

用自定义事件实现子组件prop双向绑定

更进一步,如果我们想改变传输到子组件的prop所绑定的父组件的变量,我们可以这样写:

父组件

<template><div id="app"><HelloWorld :msg="abc" @update:msg="clickprop"/><div> {{ abc }} </div></div>
</template><script>
import HelloWorld from "./components/HelloWorld.vue";
export default {name: "App",components: {HelloWorld,},data() {return {abc: "123",};},methods: {clickprop(value) {this.abc = value}},
};
</script>

子组件

<template><div class="hello"><div id="demo" @click="clickadd">{{ msg }}</div></div>
</template><script>
export default {name: 'HelloWorld',inhertAttrs: true,props: {msg: {type: String,}},data: function() {return {}},methods: {clickadd () {this.$emit('update:msg', '456')}}
}
</script>

这样子组件和父组件的值会同时变化。按下上面的123之前:

31a16cc336b8c0a2efe6de0872899260.png

按下上面的123之后:

ec496354cf53724feac6b1e956065f1a.png

值456首先通过emit传递到了父组件,再被赋值给了父组件变量abc,再通过子组件绑定的prop传递回父组件,最终同时变化成功。这样也算实现了“双向绑定”。

使用.sync修饰符简化双向绑定代码

代码中的事件名“update:msg”仅仅是一个名字而已,不和prop名相同也可以。但是如果我们保持与prop名相同,Vue为上面的代码提供了一个简写的形式:使用.sync操作符。使用它,事件名固定为了“update:prop名”的形式,我们也不需要自己写回调函数和绑定事件的代码了。

父组件

<template><div id="app"><HelloWorld :msg.sync="abc" /><div> {{ abc }} </div></div>
</template><script>
import HelloWorld from "./components/HelloWorld.vue";
export default {name: "App",components: {HelloWorld,},data() {return {abc: "123",};},methods: {},
};
</script>

子组件

<template><div class="hello"><div id="demo" @click="clickadd">{{ msg }}</div></div>
</template><script>
export default {name: 'HelloWorld',inhertAttrs: true,props: {msg: {type: String,}},data: function() {return {}},methods: {clickadd () {this.$emit('update:msg', '456')}}
}
</script>

这段代码与上一部分实现相同的效果。

可以看到,.sync修饰符仅仅起到一个简化作用而已。

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

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

相关文章

1!+2!+3!+…+10!的和

1!2!3!…10!的和 代码 public class Test {public static void main(String[] args) {/*输出1&#xff01;2&#xff01;***10&#xff01;的和*/int sum0;int n1;for (int i 1; i <10 ; i) {for (int j1;j<i;j){nn*j;}sumn;n1;}System.out.println("sum"su…

ipad无法充电怎么办_IPAD充电线破损无法保修,资深“果粉”吐槽:店大欺客!...

应该有不少人都是在使用苹果的电子产品吧&#xff1f;包括iphone、ipad之类的。您在使用的过程中有没有发现一个问题&#xff0c;这些电子产品的充电线似乎很不经用&#xff0c;没多久就会发生断裂或者破损&#xff0c;但大部分人都很少会去较真&#xff0c;一般都是自己花钱再…

有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?

代码 import java.util.Scanner;public class Testified {public static void main(String[] args) {Scanner scanner new Scanner(System.in);System.out.println("请输入月数:");int n scanner.nextInt();System.out.println("第"n"个月的兔子总…

jbod ugood 磁盘驱动状态_如何检查Mac磁盘空间,mac磁盘空间其他怎么清理

致力于成为您终身的苹果管家点击上方蓝字 关注我们检查Mac磁盘空间的时候&#xff0c;你会发现“其他存储”占用了驱动器太多的空间。你知道Mac上的其他存储在哪里&#xff0c;mac磁盘空间其他怎么清理吗&#xff1f;这里macw小编为大家带来了详细的mac 清理磁盘空间教程&…

最强鸿蒙系统txt_鸿蒙系统升级时间确认,哪些手机有望成为首批“宠儿”?

在华为麒麟芯片受到打压的这段时间&#xff0c;鸿蒙系统可以说是华为近阶段最受瞩目的研发项目之一。鸿蒙系统不仅仅是一个手机操作系统&#xff0c;它还可以安装在PC、智能家居设备。它的强大除了体现在很多方面。例如传统APP开发代码复杂&#xff0c;劳动强度大&#xff0c;后…

关于Tomcat双击startup.bat文件一闪而过问题

原因&#xff1a; 这是因为我们没有配置JAVA_HOME环境变量&#xff0c;Tomcat本身就是java写的解决方法 找到我们电脑的属性&#xff0c;打开&#xff0c;显示以下界面&#xff1a; 点击高级系统设置&#xff0c;进入下面的界面&#xff1a; 点击环境变量吗&#xff0c;进…

windows内核情景分析---进程线程2

二、线程调度与切换 众所周知&#xff1a;Windows系统是一个分时抢占式系统&#xff0c;分时指每个线程分配时间片&#xff0c;抢占指时间片到期前&#xff0c;中途可以被其他更高优先级的线程强制抢占。 背景知识&#xff1a;每个cpu都有一个TSS&#xff0c;叫‘任务状态段’…

asp.net mvc 2 DisplayTemplates 的使用

asp.net mvc 2 官方给的例子有些简单&#xff0c;主要介绍了新的功能。下面主要介绍下DisplayTemplates 给我们带来的实用的功能&#xff0c;可以自定义字段显示的方式&#xff0c;按类型分&#xff1a;String、Boolean、Decimal。按显示的方式&#xff1a;EmailAddress、Html、…

关于Tomcat端口8080占用问题(解决方法)

解决方法 打开cmd命令提示符&#xff0c;输入netstat -aov&#xff0c;在本地地址下找到8080端口&#xff0c;显示如下&#xff1a; 这个时候我们要记得PID后面的数字&#xff0c;我的是8740&#xff1a; 然后打开任务管理器&#xff0c;在详细信息下找的PID为8740的&#…

eclipse和Tomcat绑定

在file下new一个Dynamic Web Project 取好名字&#xff0c;点击next 或者finish都可以&#xff0c;完成创建 点击window,选择preferences 在搜索框里输入server,然后点击Runtime Environments 点击add 我的版本是7&#xff0c;选择7&#xff0c;大家是那个版本就选择…

OD里alt+F9和Ctrl+F9和shift+F9的区别

ShiftF9 - 与F9相同&#xff0c;但是如果被调试程序发生异常而中止&#xff0c;调试器会首先尝试执行被调试程序指定的异常处理&#xff08;请参考忽略Kernel32中的内存非法访问&#xff09;。 CtrlF9 - 执行直到返回&#xff0c;跟踪程序直到遇到返回&#xff0c;在此期间不进…

kafka数据不丢失不重复_超高速底层系统数据复制,安全精准不丢失

大家好&#xff0c;我是IT数码手机控&#xff0c;一名究极数码爱好者&#xff0c;喜欢最潮最酷的数码好物&#xff0c;追求科技美学&#xff0c;数码圈里最懂艺术&#xff0c;艺术圈里最会修电脑的女汉纸~而今天就给大家介绍佑华硬盘数据拷贝机。— ❶ —外观质感拿到佑华 PRO-…

如何在Visual Studio项目中正确添加汇编代码 .

引用注明>> 【作者&#xff1a;张佩】【镜像&#xff1a;www.yiiyee.cn/blog】 1. 问题描述 在以往的编程经历中&#xff0c;本人最常使用的汇编代码是__asm {int 3}。它可以在我的代码中插入一个软件断点。如果没有一个连接到当前程序的调试器&#xff0c;则程序将…

多叉树的前序遍历_二叉树的非递归遍历的思考

封面图来自wikipedia1 简介二叉树的深度优先遍历&#xff08;前序遍历、中序遍历、后序遍历&#xff09;是一个比较基本的操作。如果使用递归的做法&#xff0c;很容易写出相应的程序&#xff1b;而如果使用非递归的做法&#xff0c;虽然也能写出相应的代码&#xff0c;但是由于…

delphi中Label中文显示不全的问题解决办法

有时候把Label的AutoSize属性设置为True&#xff0c;当窗体显示的时候&#xff0c;Label中的内容可能会显示不完全&#xff0c;只能把AutoSize设置为False&#xff0c; 把Label调整成能显示出内容的大小。还有一种更简单的解决方法。把Form的Font属性进行如下设置&#xff1a;字…

焊接空间臂_焊接烟尘净化器设备哪种好

焊接烟尘净化器设备采用滤筒除尘器&#xff0c;焊接烟尘净化器用于焊接、切割、打磨等工序中产生烟尘和粉尘的净化以及对稀有金属、贵重物料的回收等&#xff0c;可净化大量悬浮在空气中对人体有害的细小金属颗粒。具有净化效率高、噪声低、使用灵活、占地面积小等特点。 适用于…

【摘录】C语言中利用 strtok函数进行字符串分割

C语言不像Java,Php之类的高级语言&#xff0c;对象中直接封装了字符串的处理函数。C语言中进行普通的字符串处理也经常会让我们焦头烂额……不过好在C语言 中还是提供了像strtok这样功能强大的字符串处理函数&#xff0c;可以帮我们实现部分需要的功能。下面我们介绍一下strtok…

woe分析_Python数据分析—apply函数

在对海量数据进行分析的过程中&#xff0c;我们可能要把文本型的数据处理成数值型的数据&#xff0c;方便放到模型中进行使用。也可能需要把数值型的数据分段进行处理&#xff0c;比如变量的woe化。而这些操作都可以借助python中的apply函数进行处理。今天介绍数据分析的第四课…

树莓派3b安装ubuntu mate(在有显示器前提下看)

树莓派安装&#xff1a; 准备材料 tf卡&#xff08;建议16G&#xff09;数据线树莓派win32烧录软件 &#xff0c;百度云链接&#xff1a;链接&#xff1a;https://pan.baidu.com/s/16Dq2XrqeJScUO_DxHRIz_g 提取码&#xff1a;kfkbubtuntu mate系统&#xff08;建议不要下ubu…

打包mac应用_把网址链接打包成电脑软件的制作方法

前言&#xff1a;学习一下把web页面打包成运行在桌面的应用, 并支持win / mac / linux 等平台, 记一下使用过程, 有需要的大(同)佬(学)可以玩玩~第一步 – 安装 node.jsnode.js下载地址&#xff1a;http://nodejs.cn/download/下载 Windows 安装包 (.msi) 和 Windows 二进制文件…