vue高级特性总结

news2025/2/24 4:03:19

在这里插入图片描述


文章目录

  • 一、修饰符
    • 1、事件修饰符
      • 案例1
      • 案例2
    • 2、按键修饰符
      • 案例3
    • 3、表单修饰符
      • 案例4
  • 二、计算属性computed
      • 案例5
  • 三、监听器watch
      • 案例6
      • 案例7:当商品数量大于1000时,输入框中数字自动设置成1000;当商品数量小于0时,输入框中数字自动设置成0
    • 侦听器之深度侦听
      • 案例8
  • 四、生命周期钩子函数

一、修饰符

1、事件修饰符

案例

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
		<!--1、引入vue框架-->
		<script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
		
		<style>
			.main{
				width:200px;
				height:200px;
				background: red;
			}
			.box{
				width:100px;
				height:100px;
				background: yellowgreen;
			}
		</style>
		
	</head>
	<body>
		
		<div id='app'>
			<div class='main' @click='work1'>
				<div class="box" @click='work2'>
					<button @click='work3'>按钮A</button>
				</div>	
			</div>	
			<a href='http://www.baidu.com' @click.prevent="work3">百度</a>
		</div>
			
		<script>
			
			Vue.createApp({
				data(){
					return{
						
					}
				},
				methods:{
					work1(){
						console.log('--work1--')
					},
					work2(){
						console.log('--work2--')
					},
					work3(){
						console.log('--work3--')
					},
				}
			}).mount('#app')
			
	
		</script>
		
	</body>
</html>

当点击按钮A时,会触发嵌套在最外层的事件,如下图所示:
在这里插入图片描述

html事件冒泡:html的事件默认会往外一层一层传递
事件修饰符:
.stop:阻止事件冒泡;(事件冒泡:点击子元素,事件会一级一级冒泡到父元素)
.self:只有点击元素自身时才触发事件
.prevent:阻止元素默认的事件行为

解决方法:采用.stop属性

案例1

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
		<!--1、引入vue框架-->
		<script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
		
		<style>
			.main{
				width:200px;
				height:200px;
				background: red;
			}
			.box{
				width:100px;
				height:100px;
				background: yellowgreen;
			}
		</style>
		
	</head>
	<body>
		
		<div id='app'>
			<div class='main' @click='work1'>
				<div class="box" @click.stop='work2'>
					<button @click.stop='work3'>按钮A</button>
				</div>		
			</div>
		</div>

		<script>
			Vue.createApp({
				data(){
					return{
						
					}
				},
				methods:{
					work1(){
						console.log('--work1--')
					},
					work2(){
						console.log('--work2--')
					},
					work3(){
						console.log('--work3--')
					},
				}
			}).mount('#app')
		</script>
		
	</body>
</html>

案例2

.prevent:阻止元素默认的事件行为

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
		<!--1、引入vue框架-->
		<script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
		
	</head>
	<body>
		
		<div id='app'>
			<a href='http://www.baidu.com' @click.prevent="work3">百度</a>
		</div>
	
		<script>
			Vue.createApp({
				data(){
					return{
						
					}
				},
				methods:{
					
				}
			}).mount('#app')

		</script>
		
	</body>
</html>

2、按键修饰符

键盘按键事件:@keyup
回车键:@keyup.enter:不用点击提交数据按钮触发事件,按enter键也可以触发事件

案例3

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
		<!--1、引入vue框架-->
		<script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
	</head>
	<body>
		
		<div id='app'>
			
			<div>
				账号:<input type='text' v-model.trim='user'/><br>
				密码:<input type='pwd'  v-model.number='pwd'/><br>
				手机:<input type='text'  v-model.lazy='phone'/><br>
				年领:<input type='text' @keyup.enter='alertB' v-model.lazy='age' /><br />
				<button @click='alertB'>点击提交数据</button>
			</div>
		</div>
		
		<script>
			
			Vue.createApp({
				data(){
					return{
						user:'kobe',
						pwd:123456,
						phone:15111111111,
						age:18
					}
				},
				methods:{
					alertB(){
						alert('提交数据')
					}
				}
			}).mount('#app')
			
	
		</script>
		
	</body>
</html>

在这里插入图片描述

3、表单修饰符

.trim:如果要自动过滤用户输入的首尾空白字符,可以给 v-model 添加 trim 修饰符
.number:自动将输入的纯数字转换为数值类型
.lazy:在默认情况下, v-model 在每次 input 事件触发后将输入框的值与数据进行同步 (除了上述输入法组合文字时)。你可以添加 lazy 修饰符,从而转为在 change 事件之后进行同步:

案例4

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
		<!--1、引入vue框架-->
		<script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
	</head>
	<body>
		
		<div id='app'>
			
			<div>
				账号:<input type='text' v-model.trim='user'/>
				密码:<input type='pwd'  v-model.number='pwd'/>
				手机号:<input type='text'  v-model.lazy='phone'/>
			</div>
		</div>
		
		<script>
			
			Vue.createApp({
				data(){
					return{
						user:'kobe',
						pwd:123456,
						phone:15111111111
					}
				}
			}).mount('#app')
			
	
		</script>
		
	</body>
</html>

二、计算属性computed

在vue中,如果我们需要通过一个或多个数据来计算出来另一个数据,应该怎么去做?比如:根据用户选择商品的数量来计算商品的总价格。这个时候我们就可以通过计算属性来实现。

计算属性是 vue实例中,可以通过 computed这个配置项来定义计算属性

案例5

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
		<!--1、引入vue框架-->
		<script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
	</head>
	<body>
		
		<div id='app'>
			<h3>商品名称:{{goods.name}}</h3>
			<h3>商品单价:{{goods.price}}</h3>
			<h3>商品数量:
				<button @click='add'>+</button>
				<input type='text' v-model.number='goods.number' />
				<button @click='sub'>-</button>
			</h3>
			<hr />
			<h3>总价:{{sumPrice}}</h3>
			<hr />
			<h3>数组中大于50的数字:{{range_50}}</h3>
		</div>
		
		<script>
			
			Vue.createApp({
				data(){
					return{
						goods:{
							name:"lemon",
							price:8,
							number:6
						},
						arr:[1,5,8,89,54,66,88]
					}
				},
				methods:{
					sub(){
						return this.goods.number--
					},
					add(){
						return this.goods.number++
					},
					
				},
				//计算属性
				computed:{
					//商品总价
					sumPrice(){
						return this.goods.price*this.goods.number
					},
					range_50(){
						return this.arr.filter(function(value){
							return value>50
						})
					}
				}
			}).mount('#app')
			
	
		</script>
		
	</body>
</html>

在这里插入图片描述

三、监听器watch

Vue 提供了一种更通用的方式来观察和响应 Vue 实例上的数据变动:侦听器在vue中可以使用watch来定义侦听器,

案例6

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
		<!--1、引入vue框架-->
		<script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
	</head>
	<body>
		
		<div id='app'>
			<h3>侦听器的使用</h3>
			air:<input type='text'v-model='air'/>
		</div>
		
		<script>
			
			Vue.createApp({
				data(){
					return{
						air:100
					}
				},
				//侦听器
				watch:{
					//侦听飞机这个属性值的变化,当air值发生变化时会执行和属性名称同名的侦听器中的方法
					air(val){
						//val:为lemon最新的值
						console.log('air最新的值:',val)
					},
				}
			}).mount('#app')
			
		</script>
		
	</body>
</html>

在这里插入图片描述

注意:data()中层级嵌套的数据侦听,第74行代码

案例7:当商品数量大于1000时,输入框中数字自动设置成1000;当商品数量小于0时,输入框中数字自动设置成0

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
		<!--1、引入vue框架-->
		<script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
	</head>
	<body>
		
		<div id='app'>
			<h3>商品名称:{{goods.name}}</h3>
			<h3>商品单价:{{goods.price}}</h3>
			<h3>商品数量:
				<button @click='add'>+</button>
				<input type='text' v-model.number='goods.number' />
				<button @click='sub'>-</button>
			</h3>
			<h3>最大的库存量:{{goods.maxNumber}}</h3>
			<hr />
			<h3>总价:{{sumPrice}}</h3>
			<hr />
			<h3>数组中大于50的数字:{{range_50}}</h3>
			
			<hr />
			<h3>侦听器的使用</h3>
			air:<input type='text'v-model='air'/>
		</div>
		
		<script>
			
			Vue.createApp({
				data(){
					return{
						goods:{
							name:"lemon",
							price:8,
							number:6,
							maxNumber:1000,
						},
						arr:[1,5,8,89,54,66,88],
						air:100
					}
				},
				methods:{
					sub(){
						return this.goods.number--
					},
					add(){
						return this.goods.number++
					},
					
				},
				//计算属性
				computed:{
					//商品总价
					sumPrice(){
						return this.goods.price*this.goods.number
					},
					range_50(){
						return this.arr.filter(function(value){
							return value>50
						})
					},
				},
				//侦听器
				watch:{
					//侦听飞机这个属性值的变化,当air值发生变化时会执行侦听器中同名的方法 
					air(val){
						//val:为air最新的值
						console.log('air最新的值:',val)
					},
					//data()中层级嵌套的数据侦听
					'goods.number':function(val){
						console.log(val)
						if(val<0){
							this.goods.number=0
						}else if(val>1000){
							this.goods.number=this.goods.maxNumber
						}
					}
				}
			}).mount('#app')
			
	
		</script>
		
	</body>
</html>

在这里插入图片描述

侦听器之深度侦听

语法形式一:侦听直接定义在data中的数据的变化

a(val,oldVal){
	console.log('a:',val,oldVal)
},
或者
a:function(val,oldVal){
	console.log('a:',val,oldVal)
},

语法形式二:侦听嵌套数据的具体某个字段的变化

'obj.name':function(val,oldVal){
	console.log('name:',val,oldVal)
},

语法形式三:侦听嵌套数据中任意数据的变化
开启深度侦听(只要在obj里面,不管层级多深,都能够侦听到),例如

在这里插入图片描述

obj:{
	//开启深度侦听(只要在obj里面,不管层级多深,都能够侦听到)
	deep:true,
	handler:function(val){
		console.log('obj:',val)
	}
}

案例8

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
		<!--1、引入vue框架-->
		<script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
	</head>
	<body>
		
		<div id='app'>
		
			a:<input type='text' v-model='a' />
			name:<input type='text' v-model='obj.name' />
			age:<input type='text' v-model='obj.age' />
			desc:<input type='text' v-model='obj.info.desc' />
		
		</div>
		
		<script>
			
			Vue.createApp({
				data(){
					return{
						a:'66',
						obj:{
							name:'kobe',
							age:18,
							info:{
								desc:'desc'
							}
						}
					}
				},
				methods:{
					
				},
				computed:{
					
				},
				watch:{
					//语法形式一:直接定义在data中的数据的变化
//					a(val,oldVal){
//						console.log('a:',val,oldVal)
//					},
					a:function(val,oldVal){
						console.log('a:',val,oldVal)
					},
					//语法形式二:嵌套数据的具体某个字段的变化
					'obj.name':function(val,oldVal){
						console.log('name:',val,oldVal)
					},
					//语法形式三:嵌套数据中任意数据的变化
					obj:{
						//开启深度侦听(只要在obj里面,不管层级多深,都能够侦听到)
						deep:true,
						handler:function(val){
							console.log('obj:',val)
						}
					}
					
				}
			}).mount('#app')
			
	
		</script>
		
	</body>
</html>

四、生命周期钩子函数

//生命周期的钩子函数
beforeCreate(){
	console.log('---组件对象创建之前----:')
},
created(){
	console.log('---组件对象创建之后----:')
},
beforeMount(){
	console.log('---组件挂载之前----:')
},
mounted(){
	console.log('---组件挂载之后----:')
},
beforeUpdate(){
	console.log('---数据修改之前----:')
},
updated(){
	console.log('---数据修改之后----:')
},

在这里插入图片描述

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

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

相关文章

vue中如何使用vue-pdf及相应报错解决

目录 一、安装npm 依赖 二、引入组件 1、html中使用组件 单页 多页 2、数据处理 单页 多页 三、项目使用--代码部分 四、报错解决 前言 使用vue-pdf组件实现文件预览功能 并在文件上增加操作按钮vue3不支持vue-pdf&#xff0c;vue3项目用pdfjs-dist一、安装npm 依赖…

【Vue】Vue简介、引入、命令式和声明式编程

&#x1f4ad;&#x1f4ad; ✨&#xff1a; 开始陆陆续续更新vue啦   &#x1f49f;&#xff1a;东非不开森的主页   &#x1f49c;&#xff1a;如果有幸和你一起学习一起进步&#xff0c;那就太棒啦&#xff0c;一起学习吧。&#x1f49c;&#x1f49c;   初识vue一、初识…

从零入门开源框架---若依(前后端分离版)

一、若依是什么&#xff1f; 若依它就是一个开源项目&#xff0c;别人写好的代码&#xff0c;我们拿来进行二次开发,它主要是做数据和权限管理系统。 二、使用背景 任何公司的各种大的项目必然需要一个后台权限管理系统&#xff0c;这是必然的&#xff0c;但是如果不想投入太多…

windows安装yarn 详细教程

1、yarn介绍&#xff1a;yarn是一个代码包管理器&#xff0c;它允许我们与来自世界各地的其他开发人员共享代码。想要更多了解可以进入官网查看&#xff1a;https://yarnpkg.com/getting-started 2、进入yarn官网&#xff0c;可以看见官网已经声明从新版本(16.10)开始&#xf…

Vue项目二 登录注册功能的实现

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录前言一、系统注册功能的实现1.配置注册页面路由2.注册页面的搭建3.api下发送ajax请求的文件创建二、后台数据服务的创建1.app.js文件的建立2.User.js文件的建立3.配置…

目前最流行的 5 大 Vue 动画库,使用后太炫酷了

⭐️ 本文首发自 前端修罗场(点击加入)&#xff0c;是一个由 资深开发者 独立运行 的专业技术社区&#xff0c;我专注 Web 技术、答疑解惑、面试辅导以及职业发展。现在加入&#xff0c;私聊我即可获取一次免费的模拟面试机会&#xff0c;帮你评估知识点的掌握程度&#xff0c;…

vue3 antd项目实战——table表格的自定义筛选【纯前端filters过滤、自定义筛选table表格数据】

vue3 antd项目实战——table表格自定义筛选&#xff08;使用filters属性实现表头列columns自定义筛选&#xff09;往期知识调用&#xff08;步骤不懂就看这儿&#xff09;场景复现实战演示实例1——筛选发布状态&#x1f525;1、双向绑定表格列目录、表格数据2、编写列目录内容…

vue控制滚动条滑到某个位置

一.关于web开发的各种高度的计算介绍 设置当前滑动到的距离 语法一&#xff1a;window.scrollTop(x,y) 传俩个值 //x横坐标 y纵坐标 例&#xff1a;window.scrollTop(0&#xff0c;1000) 语法二&#xff1a;window.scrollTop(options) 传对象&#xff0c;对象里面放属性 w…

js遍历map(js遍历map对象)

javascript怎么遍历map var map new HashMap();map.put(a,1);map.put(b,2);遍历&#xff1a;var key map.keySet();for (var i in key){ alert(map.get(key[i]));&#xff5d;注&#xff1a;js 中使用map&#xff0c;要先导入一个HashMap.js文件 没要求&#xff0c;引入这个文…

【深入浅出imx8企业级开发实战 | 04】嵌入式Linux设备掉电数据容错研究

这是机器未来的第58篇文章 原文首发地址:https://robotsfutures.blog.csdn.net/article/details/126924015 《深入浅出i.MX8企业级开发实战》快速导航 【01】imx8qxp yocto工程构建指南 【02】Yocto工程repo源码gitee加速配置方法 【03】imx8qxp一键独立编译指南 【04】嵌入式…

三分钟创建一个新应用,ivx的神奇之处【PPT式程序开发】

像做PPT一样的可视化编程语言你想拥有吗&#xff0c;可以自己尝试一下。像PPT一样的编程语言 文章目录&#x1f353;&#x1f353;用ivx创建一个新的应用&#xff08;零基础&#xff09;&#x1f680;&#x1f680;&#x1f96d;&#x1f96d;点击链接&#xff0c;跳转到官网&a…

【Vue 路由(vue—router)二】路由传参(params的类型 、Query参数的类型、路由name)

目录 前言 一、路由传参 效果展示 1.params的类型 &#xff08;后附源码&#xff09; params的类型源码不要在意注释代码 2.​​​​​​query参数的类型&#xff08;后附源码&#xff09; query参数的类型源码同样无视注释代码 3.路由name 前言 此内容为连载&#xff0c…

一文搞懂JS-Web-API——DOM

&#x1f308;本系列文章是博主精心整理的面试热点问题&#xff0c;吸收了大量的技术博客与面试文章&#xff0c;总结多年的面试经历&#xff0c;带你快速建立前端面试知识体系。抓住每一场面试的机会&#xff0c;知己知彼才能百战百胜。直击技术痛点&#xff0c;主动出击&…

Pinia 数据持久化储存(pinia-plugin-persistedstate)

pinia需要使用pinia-plugin-persistedstate插件来进行数据的存储 插件官网地址&#xff1a; https://prazdevs.github.io/pinia-plugin-persistedstate/guide/config.html 1、安装 这里对插件的安装就不多赘述了&#xff0c;放两张官网的截图 使用命令&#xff1a;npm i pi…

Vue--》计算属性与监视(侦听)属性的使用

目录 计算属性(computed) 监视属性(watch) 监视的两种方法 immediate选项 深度监视 计算属性(computed) 计算属性指的是通过一系列运算之后&#xff0c;最终得到一个值。这个动态计算出来的属性值可以被模板结构或methods方法使用&#xff0c;案例如下&#xff1a; <…

前端实战|React18极客园——登陆模块(token持久化、路由拦截、mobx、封装axios)

欢迎来到我的博客 &#x1f4d4;博主是一名大学在读本科生&#xff0c;主要学习方向是前端。 &#x1f36d;目前已经更新了【Vue】、【React–从基础到实战】、【TypeScript】等等系列专栏 &#x1f6e0;目前正在学习的是&#x1f525;React框架React框架React框架&#x1f525…

vite搭建vue2项目

问题提出 最近在做一个练习的小项目&#xff0c;由于要配合组成员的其它成员来搭建项目&#xff0c;大多掌握的技术栈都在vue2&#xff0c;用惯了vite来搭建&#xff08;vite真香~&#xff09;,就想着来搭建一个vue2的项目。原本以为查下百度很快可以搭好&#xff0c;没想到折…

【小程序从0到1】WXSS模版语法汇总

欢迎来到我的博客 &#x1f4d4;博主是一名大学在读本科生&#xff0c;主要学习方向是前端。 &#x1f36d;目前已经更新了【Vue】、【React–从基础到实战】、【TypeScript】等等系列专栏 &#x1f6e0;目前正在学习的是&#x1f525;React/小程序React/小程序React/小程序&am…

微前端vue项目实战 -- 乾坤qiankun框架 (一)

背景&#xff1a; 公司研发的项目主要是 GIS地图为基础的管理系统&#xff0c;由主体项目&#xff08;管理业务模块&#xff09; GIS地图应用&#xff0c;由于 GIS地图应用模块 会在多个地方使用&#xff0c;所以单独构建一个项目&#xff0c;分别在不同的业务场景中引用、交互…

JavaScript鼠标移动事件及案例

一、鼠标点击事件 1.onclick单击事件 鼠标单击时事件处理函数 <input type"button" id"bt" value"点击"> <script> //找到按钮并设置点击事件 document.getElementById("bt").onclick function (){ //被点击…