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…

JS 对GridView的一些操作

//全选、全不选function CheckBoxChoice(checkAll){ //获取所有input对象的列表 var itemsdocument.getElementsByTagName("input"); for(var i0;i<items.length;i) { if(items[i].type "checkbox") { items[i].…

头文件一般放什么

一般的c和c工程里面头文件应该放那些内容&#xff1a; 1宏定义&#xff08;#define) 2结构体、联合体和枚举类型的定义(这个地方对结构体有时候称为定义,有时候称为声明,个人认为定义更合适一点). 3类的声明和类的定义&#xff08;不是类的对象的定义&#xff09; 4函数的声…

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"个月的兔子总…

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

本篇主要讲述进程的启动过程、线程的调度与切换、进程挂靠 一、进程的启动过程&#xff1a; BOOL CreateProcess ( LPCTSTR lpApplicationName, // LPTSTR lpCommandLine, // command line string LPSECURITY_ATTRIBUTES lpProcessAtt…

【转】更改远程桌面默认端口3389及删除远程桌面连接历史记录

Windows 2000/2003等系统中的远程终端服务是一项功能非常强大的服务&#xff0c;同时也成了入侵者长驻主机的通道&#xff0c;入侵者可以利用一些手段得到管理员账号和密码并入侵主机。下面&#xff0c;我们来看看如何通过修改默认端口&#xff0c;防范黑客入侵。   远程终端…

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

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

Oracle中用For Loop 替代Cursor

我们在Oracle存储过程中需要遍历一张表&#xff0c;应该怎样做。我想大多少的人第一个念头就是Cursor。    比如&#xff1a;    create or replace procedure StudyCursor(  resulst out integer  ) is  v_tablename varchar(30);  v_tabletype varchar(11); …

最强鸿蒙系统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;叫‘任务状态段’…

前后落差大用什么词语_形容前后反差大的词语

欢迎来到阿八个人博客网站。本阿八个人博客网站提供最新的站长新闻,各种互联网资讯。喜欢本站的朋友可以收藏本站,或者加QQ:我们大家一起来交流技术!URL链接&#xff1a;https://www.abboke.com/liaomei/2019/0722/52596.html形容前后反差大的词语(1)天壤之别【解释】壤&#x…

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的&#…

攻破Win7~Win10 PatchGuard(KPP DSE)【支持Win10 TH1/TH2/RS1/RS2】【WIN64内核越狱】

EP_X0FF和Fyyre已开源 https://github.com/hfiref0x/UPGDSED 最新状态&#xff1a;已放弃Win7.Win8,8.1的静态Patch,专注于Win10 PatchGuard. 1.重启内核越狱,支持Win7~Win10 Win10 10.0.10240.0 ~ Win10.10.0.14939.693(2017.1.11更新至693最新版) Win8 6.3.9600.18289 ~ 6.…

json tostringfiy_JS学习笔记 : 类型转换之「抽象值操作」

这要是没搞懂你好意思说学过JS&#xff1f;这怕是JavaScript中最坑、最有毒的一个部分了。将值从一种类型转换成另一种类型叫做类型转换。例如&#xff1a;var a 1;var b String(a); // "1" 显式转换var c "" a; // "1" 隐式转换在JavaScrip…

cont char *p 和 char* const p 区别及记忆方法

/* cont char *p 和 char* const p 区别及记忆方法 const char *p "hello"; 和 char const *p "hello"; 等价 保护的是内容&#xff08;即这段buffer只读&#xff0c; 记忆&#xff1a;const 在*p前&#xff0c; *p是取内容&#xff0c;保护内容&am…

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;在此期间不进…