【vue系列-02】vue的核心属性,数据代理,事件

news2025/6/24 20:22:55

vue的核心属性

  • 一,vue的核心属性
    • 1,模板语法
      • 1.1,插值语法
      • 1.2,指令语法
    • 2,数据绑定
      • 2.1,单向绑定
      • 2.2,双向绑定
    • 3.mvvm模型
    • 4,数据代理
      • 4.1,数据代理的基本使用
      • 4.2,数据代理在vue中使用
      • 4.3,数据代理总结
    • 5,事件
      • 5.1,事件处理
      • 5.2,事件修饰符
        • 5.2.1,prevent
        • 5.2.2,stop
        • 5.2.3,once
        • 5.2.4,capture
        • 5.2.5,self
        • 5.2.6,passive
      • 5.3,键盘事件

一,vue的核心属性

1,模板语法

1.1,插值语法

就是直接使用两对花括号接收实例传过来的值。如下面的 {{name}} ,这样就获取到了这个vue实例中的name属性的这个值

<div id="root">
    <h1 id="c">hello {{name}}</h1>
</div>
< script type = "text/javascript" >
	new Vue({
		//指定当前实例为哪个容器服务,id对应#,class对应.
		el: '#root',
		//data用于存储数据,只有el对应的容器可以使用
		data: {
			name: 'zhenghuisheng'
		}
	})
</script>

1.2,指令语法

就是通过标签内部将实例的值就行一个引用,如做一个双向绑定,可以使用 v-bind 这个指令,同时这个指令也可以简写成 :bind 。除了这个v-bind,像其他的 v-if , v-model都是这个指令语法

<div id="root">
    <a v-bind:href = "url">点击跳转百度</a>
    <a :href = "url">点击跳转百度</a>
</div>
< script type = "text/javascript" >
	new Vue({
		//指定当前实例为哪个容器服务,id对应#,class对应.
		el: '#root',
		//data用于存储数据,只有el对应的容器可以使用
		data: {
			url:'https://www.baidu.com/',
		}
	})
</script>

插值语法和指令语法的区别就是:插值语法往往是用于解析标签体中的内容,指令语法往往用于解析标签,比如说一些标签属性,标签体内容,绑定事件等。

2,数据绑定

数据绑定主要分为单向绑定和双向绑定。

2.1,单向绑定

单向绑定只能用于从vue实例流向页面,就是在修改了vue实例中的data值的时候,那么对应的容器中的值也会跟着改变,而修改容器中的值,vue实例中的值不改变。

单向数据绑定:<input type="text" v-bind:value = "name"><br/>
单向数据绑定简写:<input type="text" :value = "name"><br/>

2.2,双向绑定

不仅可以将值从vue实例流向容器,也可以将值从容器流向实例。就是当Vue实例中的值发生变化的时候,那么这个容器中的值也会发生改变,容器中的值发生改变那么就意味着页面上的值也会发生改变;反之亦然,页面上的值发生改变,那么vue实例上的值也会发生改变。

双向数据绑定:<input type="text" v-model:value = "name"><br/>
双向数据绑定简写:<input type="text" v-model = "name"><br/>

但是双向绑定一般都应用在表单元素上,如一些input,select等,即对应的元素一定要有一个value值。

3.mvvm模型

主要有View视图层,model模型层和ViewModel视图模型中间层这三层组成,

在这里插入图片描述

模型层用M来表示,主要对应Vue实例的data中的一些数据,如上述所说的一般的js对象。

视图主要是用V来表示,就是通过一些模板生成的页面

视图模型主要是通过 VM 来表示,主要是对应整个具体的Vue实例对象。在ViewModel里面,有一个Data Bindings数据绑定和DOM LIsteners监听器,数据绑定就是上面的单向绑定和双向绑定,监听器就是当数据发生变换的时候,单向绑定或者双向绑定里面需要进行相应的改变就是通过这个监听器来实现的。

如下段代码,这个div对应的就是view视图层,Vue实例中的 data 就是对应的model 模型层,整个 new 出来的Vue 实例就是VIewModel 视图模型层。

<div id="root">
    <h1 id="c">hello {{name}}</h1>
</div>
< script type = "text/javascript" >
	new Vue({
		//指定当前实例为哪个容器服务,id对应#,class对应.
		el: '#root',
		//data用于存储数据,只有el对应的容器可以使用
		data: {
			name: 'zhenghuisheng'
		}
	})
</script>

主要是通过这个ModelView实现Model和View之间的连接。

4,数据代理

4.1,数据代理的基本使用

主要是通过这个 Object.defineProperty实现,通过这个方式来实现对象的代理,并且在该对象中设置属性和属性值。

let person = {
    name:'zhs',
    sex:'男'
}
//第一个参数:要代理的对象
//第二个参数:该对象中需要增加的属性
//第三个参数:该属性对应的值
Object.defineProperty(person,'age',{
    value:'18'
})

但是在输出对象中可以发现通过代理增加进来的属性其颜色值稍微比较浅,并且在这个被代理的person对象中,他的这个age属性值不能被枚举,如在遍历时,这个值不能获取到这个值。

当然也可以通过这个 enumerable 这个属性来控制是否可以使用这个枚举字段。这个字段的默认值为false,设置为true之后,这个枚举值外部就可以直接使用了。 同时还有这个writable属性,用于控制其值能否被修改,以及configurable属性,用于判断属性是否可以被删除。

Object.defineProperty(person,'age',{
    value:'18',
    enumerable:true,
    writable:true,    
    configurable:true
})

也可以通过函数的方式来为这个对象的age属性赋值,并且这个对象的age的值可以获取局部变量中的值。

let number = 100; 
Object.defineProperty(person,'age',{
   //当需要读取这个person的age属性时,get函数(getter)就会被调用
   get:function(){
        return number
   }
   //当需要设置这个person的age属性时,set函数(setter)就会被调用
    set(value){
        console.log('有人修改了属性,且值是',value )
		number = value
    }
})

4.2,数据代理在vue中使用

依旧是这个那么属性值,结合上面的setter和getter。就是当读取一个值的时候,会通过这个getter的动态代理方式将值从vue实例赋予页面中;当修改这个值的时候,也会调用这个setter的动态代理,将值修改之后存放到vue实例,vue实例的值做出相应的修改,然后又由于监听器发现这个值发生该变化,然后又会通过双向绑定将被修改的值又回显到页面中。

<div id="root">
    <h1 id="c">hello {{name}}</h1>
</div>
< script type = "text/javascript" >
	new Vue({
		el: '#root',
		data: {
			name: 'zhenghuisheng'
		}
	})
</script>

并且,实例中的 data 值,和这个 _data值一样,因此有了这个动态代理之后,就是将需要通过 {{vm._data.name}}获取值的方式,直接转换成简单的方式了。

4.3,数据代理总结

其实这个数据代理的底层就有那么一点像JDK的动态代理,就是通过实现一个接口,然后将要被代理的对象的值获取出来,然后做一个动态增强,就是在原来的值的基础上,对值进行一个内部的读写操作。这个vue的代理原理也是这样的,通过这个 Object.defineProperty 方法将所有属性添加到这个vm上,然后通过setter和getter去操作里面的属性。

其主要原理就是通过vm对象代理出vue实例的data对象,然后通过这个vm对象来操作里面的属性。

5,事件

5.1,事件处理

就是通过v-click()去调用一个函数,如一个按钮的点击事件,在容器中的配置如下。

//在容器中新增一个按钮,不传参,内部默认传一个event事件
<button v-click = "show">点我提示信息</button>
//传参,需要携带$event,参数位置随意
<button v-click = "show($event,a)">点我提示信息</button>

在实例中的配置如下,

new Vue({
     //methods:{ show(event){}} //不加参数
 	 methods:{ show(event,a){...}} //不加参数
})

这个指令也可以直接使用简写 @click() 。在vue实例中,methods里面的方法不会做数据代理,而这个data中的数据会做数据代理。

5.2,事件修饰符

Vue中总共有六种事件修饰符,主要有prevent,stop,once,capture,self,passive这六种,其中前面三种比较常用。

5.2.1,prevent

表示阻止默认事件。如下,在一个超链接中写一个弹窗,然后点击完弹窗之后让他不进行一个超链接的跳转

<div id="root">
    <a href = "www.baidu.com" @click.prevent = "toBaiDu">点击跳转到百度</a>
</div>
< script type = "text/javascript" >
	new Vue({
		el: '#root',
		methods:{
            toBaiDu(e){
                alert("点击完才能跳转百度...");
            }
        }
	})
</script>

5.2.2,stop

表示阻止事件冒泡,比如说一个嵌套的容器都绑定了一个点击事件,那么这个内部的容器触发完这个事件之后,外部的这个容器也会触发一次。如下面有一个div和一个button,点击这个按钮之后,两个容器都会触发这个事件,都会弹窗出这个东西,但是加了这个stop之后,那么就不会有第二次的弹窗了。

<div id="root" @click = "toBaiDu">
    <button @click.stop = "toBaiDu">点我</button>
</div>
< script type = "text/javascript" >
	new Vue({
		el: '#root',
		methods:{
            toBaiDu(e){
                alert("点击完才能跳转百度...");
            }
        }
	})
</script>

5.2.3,once

表示事件只触发一次,如在刚进入一个系统的页面时会有一个欢迎的小弹窗,弹完这一次之后就再也不会出现。

<div id="root" @click = "toBaiDu">
    <button @click.once = "toBaiDu">点我</button>
</div>
...

5.2.4,capture

表示事件的捕获模式。如下在两个嵌套的容器中,同时都绑定了这个showMsg的这个事件,那么在点击这个box2的时候box1也会受到影响。在整个过程中,会经历一个捕获阶段和一个冒泡阶段,捕获阶段就是从1到2,也就是从外到内;冒泡阶段才是真正处理事件的阶段,冒泡顺序就是从2到1,那么处理事件阶段也是从2到1。要是想解决这种先捕获先处理事件,可以直接在box1上面的事件使用 @click.capture ,这样就能在捕获之后,立马将事件处理了。

<div class="box1" @click="showMsg(1)">
    div1
    <div class="box2" @click="showMsg(2)>
        div2
    </div>
</div>

5.2.5,self

表示只有event.target是当前操作的元素蔡触发事件。 如下这个div容器和button按钮都绑定了这个showInfo事件,在点击按钮之后也会从按钮冒泡到div容器。但是由于点击的是按钮,那么这个event.target的值始终是这个按钮,不会因为冒泡而发生改变,所以在添加这个.self之后,div容器发现这个event.target 的值不是div,那么也就不会触发这个事件了。这也是通过另一种思路来阻止冒泡。

<div class="box1" @click.self="showInfo">
    <button @click="showInfo">点我提示信息</button>
</div>

5.2.6,passive

表示事件的默认行为立即执行,无需等待事件回调执行完毕。 就是类似于异步操作,优先先响应可见的或者说是默认的操作,复杂的操作异步去完成。

<ul @wheel.passive="demo" class="list">

以上六种事件,也可以结合使用,如这个阻止默认事件和阻止冒泡结合使用

@click.prevent.stop="showInfo"

5.3,键盘事件

在键盘事件中,主要有keyDown和keyUp两种绑定事件,主要是通过这个@keydown和@keyup两种方式修饰。在vue中,有九个常用的别名,分别如下

回车 => enter   删除 => delete    退出 => esc
空格 => space   换行 => tab       上 => up
下 => down      左 => left       右 => right

然后就可以直接通过指令的方式,从而触发这个键盘事件。如下,在点击这个回车键的时候,就会触发这个事件。

@keyup.enter = "showInfo"

也可以直接通过键盘上面的名字作为后面的参数,如果有两个字母组成的,如CapsLock,那么需要将两个字母都变成小写,然后之间加一根横线,即写成caps-lock。

//先通过event.key 获取到键盘上面的名字
showInfo(event){
	console.log(event.key);   
}
//获取到名字之后将名字加入到这个@keyup. 的后面
@keyup.Enter = "showInfo"

键盘上也有五个比较特殊的键,分别是tab,ctrl,alt,shift,meta。tab键由于本身带有切换焦点的功能,因此这个tab键必须和这个keydown去结合使用;其余四个性质一样,最好也是配合着keydown去使用,可以正常的触发事件,如果配合这个keyup,那么除了按下本身这个键之外,还需要随机的按一个键,并且在这个随机键释放的时候事件才会被触发。

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

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

相关文章

pytorch实现好莱坞明星识别

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f366; 参考文章地址&#xff1a; 365天深度学习训练营-第P6周&#xff1a;好莱坞明星识别&#x1f356; 作者&#xff1a;K同学啊一、前期准备 1.设置GPU import torch from torch import nn …

获取rdp保存的凭证

获取用户保存的rdp凭证 当获取到一台windows服务器&#xff0c;可以尝试获取本地远程连接的信息&#xff0c;如果用户在登入rdp时勾选了 允许为我保存凭证的选项&#xff0c;则在该用户本地会生成一个凭证文件&#xff0c;我们只需要破解该凭证文件即可获取其明文密码。 通过注…

[含文档+PPT+源码等]基于SSM框架图书借阅管理系统开发与设计

博主介绍&#xff1a;✌在职Java研发工程师、专注于程序设计、源码分享、技术交流、专注于Java技术领域和毕业设计✌ 项目名称 [含文档PPT源码等]基于SSM框架图书借阅管理系统开发与设计 系统介绍 《基于SSM框架图书管理系统开发与设计》 该项目含有源码、配套开发软件、软件安…

元数据相关的术语,你知道几个?

元数据被认为是数据治理的基石&#xff0c;但关于元数据相关的概念&#xff0c;很多人不是那么清楚&#xff0c;今天就和大家详解元数据相关的术语。当然&#xff0c;与元数据相关的概念非常多&#xff0c;以下仅罗列几个常见的。 01 元数据 1.名词解释 元数据最简单的定义…

【关于时间序列的ML】项目 7 :使用机器学习进行每日出生预测

&#x1f50e;大家好&#xff0c;我是Sonhhxg_柒&#xff0c;希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流&#x1f50e; &#x1f4dd;个人主页&#xff0d;Sonhhxg_柒的博客_CSDN博客 &#x1f4c3; &#x1f381;欢迎各位→点赞…

u盘无法识别如何修复?恢复U盘,建议尝试下这些方法

我们基本都有使用过U盘&#xff0c;也都遇到过U盘损坏的问题。u盘无法识别如何修复&#xff1f;有没有什么实用的方法呢&#xff1f;来看看这篇文章&#xff0c;简单几步&#xff0c;就可以修复成功。如果在操作过程中&#xff0c;遇到数据丢失&#xff0c;也有方法帮你恢复&am…

ASP.NET开发的医疗健康咨询平台源码 养生知识咨询 寻根问药平台源码 C#源码

一、源码特点&#xff1a; 爱心医生健康知识门户网站是一个权威的医疗科普视频、语音、知识、医疗健康问答平台。 包含所有源代码和数据库&#xff0c;可以直接部署到IIS中使用。 二、菜单功能 网站页面&#xff1a; 1、首页&#xff1a;包含幻灯片。 2…

MySQL面试常问问题(SQL 优化 ) —— 赶快收藏

目录 1.慢SQL如何定位呢&#xff1f; 2.有哪些方式优化慢SQL&#xff1f; 避免不必要的列 分页优化 索引优化 JOIN优化 排序优化 UNION优化 3.怎么看执行计划&#xff08;explain&#xff09;&#xff0c;如何理解其中各个字段的含义&#xff1f; 1.慢SQL如何定位呢&a…

基于python开发的DIY宠物桌面系统(附源码)--可自定义修改

定制你的宠物桌面 最近想要做一个自己独一无二的桌面宠物&#xff0c;可以直接使用python来自己订制。属于一个小项目&#xff0c;这个教程主要包含几个步骤&#xff1a; 准备需要的动图素材 规划自己需要的功能 使用python的PyQt5订制功能 在这个教程中&#xff0c;我主要…

Apache Flink 任务 Tasks 和任务槽 Task Slots

目录 任务槽&#xff08;Task Slots&#xff09; 任务槽数量的设置 任务对任务槽的共享 任务槽和并行度的关系 任务槽&#xff08;Task Slots&#xff09; Flink 中每一个 worker(也就是 TaskManager)都是一个 JVM 进程&#xff0c;它可以启动多个独立的线程&#xff0c;来并…

【数据结构】详解队列和循环队列

目录一.队列1.队列的概念及结构2.队列的实现Queue.hQueue.c二.循环队列1.循环队列的实现2.设计循环队列解题思路代码一.队列 1.队列的概念及结构 队列&#xff1a;只允许在一端进行插入数据操作&#xff0c;在另一端进行删除数据操作的特殊线性表&#xff0c;队列具有先进先出…

四、网络层(六)移动IP

目录 6.1 移动IP的概念 6.2 移动IP的基本工作原理 6.2.1代理发现与注册 6.2.2固定主机向移动主机发送IP数据报 6.2.3移动主机向固定主机发送IP数据报 6.2.4同址转交地址&#xff08;简单了解&#xff09; 6.2.5三角形路由问题&#xff08;简单了解&#xff09; 6.1 移…

事关你“吃住行游购娱”的12项安全国标图解来了

标准是安全建设的“尺子”。近期&#xff0c;国家市场监督管理总局、国家标准化管理委员会发布中华人民共和国国家标准公告&#xff08;2022年第13号&#xff09;&#xff0c;全国信息安全标准化技术委员会归口的14项网络安全国家标准获批发布&#xff0c;其中12项涉及数据安全…

不同类型单板布线策略6大类

类型一PCB布线策略 一 &#xff0c;类型一主要特征如下&#xff1a; 严格的长度规则、严格的串扰规则、拓扑规则、差分规则、电源地规则等。 二&#xff0c;关键网络的处理&#xff1a;总线定义Class&#xff1b; 要求满足一定的拓扑结构、stub及其长度&#xff08;时域&a…

关于模型中的R方

1、一元线性回归 R方在一元线性回归模型中&#xff0c;衡量【响应变量X和预测变量Y】的线性关系。 R方cor&#xff08;X,Y)^2 但是&#xff0c;在多元线性回归模型中&#xff0c;因为涉及多个预测变量&#xff0c;全部R方就是衡量响应变量和多个预测变量当中的关系。 而有关…

阿里云张献涛:高性能计算发展的三大趋势

12 月 12-15 日&#xff0c;第十八届 CCF 全国高性能计算学术年会&#xff08;以下简称 CCF HPC China 2022&#xff09;以线上的方式举行&#xff0c;国内外众多知名专家学者&#xff0c;以及高性能计算产业界的头部企业代表云上相聚&#xff0c;探讨高性能计算的发展趋势。阿…

zabbix6.0安装教程(五):二进制包安装

zabbix6.0安装教程&#xff08;五&#xff09;&#xff1a;二进制包安装 目录一、使用ZABBIX官方存储库二、Red Hat zabbix企业版 Linux/CentOS1. 概述2. 安装注意事项2.1 使用 Timescale DB 导入数据2.2 PHP 7.22.3 配置 SELinux3. Proxy 安装3.1 创建数据库3.2 导入数据3.3 为…

计算机网络原理第5章 运输层(12.24完结)

目录~ 5.1 运输层协议概述 5.1.1 进程之间的通信 从通信和信息处理的角度看&#xff0c;运输层向它上面的应用层提供通信服务&#xff0c;它属于面向通信部分的最高层&#xff0c;同时也是用户功能中的最低层。 当网络的边缘部分中的两个主机使用网络的核心部分的功能进行…

再学C语言12:字符串(3)——转换说明

一、转换说明的意义 意义&#xff1a;把存储在计算机中的二进制格式的数值转换成一系列字符&#xff08;一个字符串&#xff09;以便于显示&#xff1b;实质上是翻译说明&#xff0c;并不会替代原值 应该使转换说明与要打印的值的类型相匹配 参数传递机制 float n1; double …

陈都灵现身海南国际电影节,新片《关索岭》票房有望超《阿凡达》

刚送走了厦门金鸡奖&#xff0c;又迎来了海南电影节&#xff0c;第四届国际电影节&#xff0c;已经在美丽的海南岛拉开帷幕。 众多的中国优秀电影人&#xff0c;都欢聚一堂共话未来&#xff0c;为中国电影的发展献言献策&#xff0c;也展现出电影人的精神风貌。 在本届电影节走…