一幅长文细学Vue(四)——组件基础(下)

4 组件基础(下)

摘要

​ 在本文中年我们会了解什么是props,怎么利用props在父组件和子组件之间传递数据;什么是计算属性,还有什么是事件。

声明:为了文章的清爽性,在文章内部的代码演示中只会附上部分演示代码,main.js文件的代码通常不贴出,如果感兴趣可以前往代码仓库获取

作者:来自ArimaMisaki创作

文章目录

  • 4 组件基础(下)
    • 4.1 props验证
      • 4.1.1 什么是props验证
      • 4.1.2 多个可能的类型
    • 4.2 计算属性
      • 4.2.1 什么是计算属性
      • 4.2.2 计算属性和方法
    • 4.3 自定义事件
      • 4.3.1 自定义组件概述
      • 4.3.2 自定义事件传参
    • 4.4 组件上的双向绑定
      • 4.4.1 为什么需要在组件上使用v-model
      • 4.4.2 实现组件间的双向绑定

4.1 props验证

4.1.1 什么是props验证

说明:如果你想要对外界传入组件的数据进行合法性验证,则原先的props选项使用数组写法没有这个功能,为此,我们改用对象类型的props选项写法。props对象中的键为组件使用者传入数据,值为传入数据的数据类型。


4.1.2 多个可能的类型

说明:对象类型的props选项提供了多种数据验证方案,如

  • 基础的类型检查:直接为组件的prop属性指定基础的校验类型,从而防止组件的使用者为其绑定错误类型的数据
  • 多个可能的类型:如果某个prop属性值得类型不唯一,此时可以通过数组的形式,为其指定多个可能的属性值
  • 必填项校验:prop属性可以是一个prop对象,对象中存在required和type,如果开启required为true,则type对应的数据类型必须满足,否则控制台报错
  • 属性默认值:prop对象还可以存在default,表示该prop属性默认的值。
  • 自定义验证函数:prop对象中可以自定义一个验证函数,从而对prop属性的值进行更加精确的控制。
<template><div><p>数量:{{count}}</p><p>状态:{{state}}</p></div>
</template><script>
export default {name:'MyCount',props:{// 必填项校验count:{type:Number, // 基础类型校验required:false,default:100 // 默认值},state:Boolean,type:{validator(value){return ['success','warning','danger'].indexOf(value) !== -1}}}
}
</script>
<template><div><h1>App根组件</h1><hr><MyCount :state="true" type="success"></MyCount></div>
</template><script>
import MyCount from './Count.vue';
export default {name:'MyApp',components:{MyCount,}
}
</script>

4.2 计算属性

4.2.1 什么是计算属性

说明:我们可以向外暴露computed选项,其可写作对象形式。对象中的每一项都是一个函数,它可以实时监听data中数据的变化,并且return一个计算后的新值。

<template><div><input type="text" v-model.number = "count"><p>{{count}}乘以2得:{{plus}}</p></div>
</template><script>
export default {name:'MyCounter',data(){return {count:1,}},computed:{plus(){return this.count*2;}}
}
</script>
<template><div><h1>App根组件</h1><hr><my-counter></my-counter></div>
</template><script>
import MyCounter from './MyCounter.vue';
export default {name:'MyApp',components:{MyCounter,}
}
</script>

4.2.2 计算属性和方法

疑问:把方法定义在methods节点上不是一样吗,为何非要定义在computed节点上?

解释:相对于方法来说,计算属性会缓存计算的结果,只有计算属性的依赖项发生变化时,才会重新进行计算,因此计算属性的性能更好。


4.3 自定义事件

4.3.1 自定义组件概述

说明:在封装组件时,为了让组件的使用者可以监听到组件内状态的变化,此时需要用到组件的自定义事件。

使用步骤

  1. 声明自定义事件:必须事先在emits节点中声明
  2. 触发自定义事件:通过this.$emit(‘自定义事件名称’)来触发
  3. 监听自定义事件:通过v-on的形式来监听自定义事件

4.3.2 自定义事件传参

说明:如果想要让自定义的事件可以访问到组件的数据,可以在自定义事件从参数列表第二位开始传入参数(第一位是自定义事件名称)。

<template><div><p>Count的值是:{{count}}</p><button @click="add">+1</button></div>
</template><script>
export default {name:'MyCount',emits:['countChange'],data(){return {count:0,}},methods:{add(){this.count++;// 2 触发自定义事件this.$emit('countChange',this.count)}}
}
</script>
<template><div><h1>App根组件</h1><hr><MyCounter @countChange="getCount"></MyCounter></div>
</template><script>
import MyCounter from './Counter.vue';
export default {name:'MyApp',methods:{getCount(val){alert('触发了'+val+'次事件');}},components:{MyCounter,}
}
</script>

4.4 组件上的双向绑定

4.4.1 为什么需要在组件上使用v-model

说明:当我们需要维护组件内外数据的同步时,可以在组件上使用v-model指令。


4.4.2 实现组件间的双向绑定

父向子同步:父组件通过v-bind将数据通过props传入子组件

子向父同步:在v-bind指令之前添加v-model指令,并且在子组件中声明emits自定义事件,当触发$emit事件时,更新父组件的数据。

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

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

相关文章

linux中fcntl()、lockf、flock的区别

fcntl()、lockf、flock的区别 ——lvyilong316 这三个函数的作用都是给文件加锁&#xff0c;那它们有什么区别呢&#xff1f;首先flock和fcntl是系统调用&#xff0c;而lockf是库函数。lockf实际上是fcntl的封装&#xff0c;所以lockf和fcntl的底层实现是一样的&#xff0c;对文…

获取.properties后缀的数据

在MyPro.properties中的数据如下&#xff1a; NameABC 测试类中&#xff1a; Properties properties new Properties(); String configFile "MyPro.properties"; //将MyPro.properties文件编译成文件流 InputStream is ConfigManager.class.getClassLoader().getR…

iOS开发拓展篇—音频处理(音乐播放器6)

一、图片处理 说明&#xff1a; Aspect表示按照原来的宽高比进行缩放。 Aspectfit表示按照原来的宽高比缩放&#xff0c;要求看到全部图片&#xff0c;后果是不能完全覆盖窗口&#xff0c;会留有空白。 Aspectfill表示按照原来的宽高比缩放&#xff0c;但只能看到部分图片。引发…

词频统计预处理之综合练习

下载一首英文的歌词或文章 news , 生成词频统计 sep,.;:"" for c in sep:newsnews.replace(c, )wordlistnews.lower().split()wordDict{} for w in wordlist:wordDict[w]wordDict.get(w,0)1wordSetset(wordlist) for w in wordSet:wordDict[w]wordlist.count(w)f…

一幅长文细学Vue(五)——组件高级(上)

5 组件高级&#xff08;上&#xff09; 摘要 ​ 在本文中&#xff0c;我们会详细讨论watch侦听器的基本使用&#xff0c;并且了解vue中常用的生命周期函数、实现组件之间的数据共享&#xff0c;最后学习如何在vue3.x项目中全局配置axios。 声明&#xff1a;为了文章的清爽性&am…

IOS开发之----常用加密方法

本文转载至 http://blog.csdn.net/wildfireli/article/details/23191983 &#xff08;AES、MD5、Base64&#xff09; 分类&#xff1a; iPhone 2014-04-08 16:30 187人阅读 评论(0) 收藏 举报 目录(?)[] 1、AES加密 NSDataAES.h文件 // // NSData-AES.h // Smile // // Create…

JAVA并发编程实战---第三章:对象的共享(2)

线程封闭 如果仅仅在单线程内访问数据&#xff0c;就不需要同步&#xff0c;这种技术被称为线程封闭&#xff0c;它是实现线程安全性的最简单的方式之一。当某个对象封闭在一个线程中时&#xff0c;这种方法将自动实现线程安全性&#xff0c;即使被封闭的对象本生不是线程安全的…

Python----面向对象---自定义元类控制类的实例化行为的应用

一、单例模式 1 class Mysql:2 def __init__(self):3 self.host 127.0.0.14 self.port 33065 6 7 obj1 Mysql()8 obj2 Mysql()9 10 print(obj1) 11 print(obj2) 12 13 结果为&#xff1a; 14 15 <__main__.Mysql object at 0x0000021CBF4DB588&g…

流行的编程语言及其趋势

转&#xff1a;StackOverflow上的编程趋势 http://www.csdn.net/article/2013-07-08/2816144-StackOverflow-Programming-Trends 摘要&#xff1a;相信每个程序员都知道StackOverflow问答网站&#xff0c;本文作者dodgy_coder通过StackExchange Data Explorer Query收集了该网站…

史上最全面,清晰的SharedPreferences解析

基础用法获取Sp:getput监听器原理分析获取SharedPreferences构造SharedPreferencesgetX原理分析putX原理分析创建editorputStringapplyapply总结commitSharedPreferences最佳实践勿存储过大value勿存储复杂数据不要乱edit和apply&#xff0c;尽量批量修改一次提交建议apply&…

【译】《学习JavaScript设计模式》(二)

原书链接Learning JavaScript Design Patterns水平有限很多地方不通顺&#xff0c;错翻漏翻欢迎交流。 模式测试&#xff0c;原生模式&约法三章 记住并不是所有的算法啊&#xff0c;最佳实践啊&#xff0c;解决方案啊什么的都可以被称为一个完整的模式的。很可能它就缺了点…

I.Mx6 使用串口连接PSAM卡的注意事项

&#xff5b;背景&#xff5d; 1. 使用模拟方式与PSAM卡进行通信&#xff0c;对时序的要求非常严格&#xff0c;在自己的代码中一定要做好相关延时尤其是每个etu的时间 要测量准确。 2. 使用串口方式与PSAM卡直连&#xff0c;是硬件级的通信&#xff0c;写起来相对容易一些。 &…

CentOS7.0 安装 tomcat-9.0

2019独角兽企业重金招聘Python工程师标准>>> 1、解压 # tar -zxvf apache-tomcat-9.0.0.M4.tar.gz -C /opt/usr/local 改个名字好以后操作&#xff1a; # mv apache-tomcat-9.0.0.M4.tar.gz tomcat 2、启动&停止 # /opt/usr/local/tomcat/bin/start…

SpringMVC转发和重定向

页面间的跳转分为转发和重定向 但是转发和重定向在springMVC里又分为转发到页面和重定向到页面&#xff0c;转发到处理器方法和重定向到处理器方法 下边是具体实现功能的代码&#xff1a; 转发到页面和重定向到页面 //转发到页面RequestMapping("/five")public Strin…

一幅长文细学华为MRS大数据开发(四)——HBase

4 HBase 摘要&#xff1a;HBase是一种非关系型数据库&#xff0c;它是基于谷歌BigTable的开源实现&#xff0c;和BigTable一样&#xff0c;支持大规模海量数据的存储&#xff0c;对于分布式并发数据处理的效率极高&#xff0c;易于扩展且支持动态伸缩&#xff0c;适用于廉价设备…

AOP技术基础

1、引言2、AOP技术基础 3、Java平台AOP技术研究4、.Net平台AOP技术研究2.1 AOP技术起源 AOP技术的诞生并不算晚&#xff0c;早在1990年开始&#xff0c;来自Xerox Palo Alto Research Lab&#xff08;即PARC&#xff09;的研究人员就对面向对象思想的局限性进行了分析。他们研…

Could not find a package,configuration file provided by G2O ,G2OConfig.cmake,g2o-config.cmake

因为项目需要使用到g2o&#xff0c;所以自己从git上面clone下来&#xff0c; git clone https://github.com/RainerKuemmerle/g2o.git 然后&#xff1a; cd g2o mkdir build cd build cmake .. make -j4 编译完成&#xff0c;并在CMakeLists.txt使用g2o&#xff1a; set(G2O_DI…

TCP 协议的三次握手、四次分手

详细描述了 TCP 协议的连接和关闭的整个过程。解释了为什么 TCP 协议是面向连接的、可靠的数据传输协议。 TCP 在互联网上之间的通信交流&#xff0c;一般是基于 TCP (Transmission Control Protocol&#xff0c;传输控制协议) 或者 UDP (User Datagram Protocol&#xff0c;用…

prefix.pch文件的一些简单使用

该文件可以引入一些全局通用的文件&#xff0c;这样就不用每次在文件中导入&#xff0c;也可以定义全局通用的变量或常量&#xff0c;如 //定义NSString常量 #define ServiceName "cn.zmfc" //定义颜色 #define BackgroudColor [UIColor colorWithRed:232/2…

[Bzoj4182]Shopping(点分治)(树上背包)(单调队列优化多重背包)

4182: Shopping Time Limit: 30 Sec Memory Limit: 128 MBSubmit: 374 Solved: 130[Submit][Status][Discuss]Description 马上就是小苗的生日了&#xff0c;为了给小苗准备礼物&#xff0c;小葱兴冲冲地来到了商店街。商店街有n个商店&#xff0c;并且它们之间的道路构成了一…