数据绑定,defineProperty,v-on,事件处理

2024-01-15 17:28

本文主要是介绍数据绑定,defineProperty,v-on,事件处理,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录​​​​​​​

v-bind单向数据绑定

defineProperty

@是v-on的简写

事件处理

v-bind单向数据绑定

从name绑定到v-bind到value单向数据绑定:

<input type="text"  :value="name">
<input type ="text" v-model="name">

代码错误,因为v-model只能用在表单类输入元素上,就是value值

<h2 v-bind:x="name"></h2>

el有两种写法

data也有两种,但是到组件时候必须用函数写法否则报错

vue管理的函数一定不能写箭头函数

m模型:data中数据

view:模版

vm:视图模型

data bindings把数据摆到屏幕上

这种情况:

let number=18;
let person={name:'xiaofang',
age:number
}

defineProperty

但是后续如果number值改变,person里的不会再随着number值改变而改变

Object.defineProperty(person, 'age', {value: 18,enumerable: true,//默认为falsewritable: true,//控制属性是否能被修改configurable:true//控制属性是否可以被删除})

这个defineProperty里的get和set特别重要:

还是前面的前提下,每次动态访问age都会提示则用get,此时修改number值,age的值会随之改变;每次动态修改age的值,会调用set,此时只会修改表面age的值,因为真实来源是number的值,除非在set里将修改后的值赋值为value

<script type="text/javascript">let person = {name: 'zhangsan',sex: 'nan'}//三个参数值,第一个是你要给哪个对象添加属性,添加属性叫什么名字,配置项Object.defineProperty(person, 'age', {value: 18,enumerable: true,//默认为falsewritable: true,//控制属性是否能被修改configurable: true,//控制属性是否可以被删除get: function () {console.log('hello');return number;},//可以把function()这边这个名字省略直接写成:get(){}set(value) {//当有人修改person的age时候,set调用得到修改值// 但是这里set虽然表面能改变age的值,age真实值不变,他来自number,与number值关联number = value}})// console.log(person);// // console.log(Object.keys())// //传入对象,所有属性的属性名提取出来,作为数组// console.log(Object.keys(person))// //for in 既能便利数组也能遍历对象// for (let index in person) {//     console.log('@', person[index]);// }// // 用三个参数哪个func添加的age不能被枚举//当有人读取person的age属性时
// get和set特别重要!!</script>

通过Object.defineProperty()把data对象中所有属性添加到vm上。
为每一个添加到vm上的属性,都指定一个getter/setter。
在getter/setter内部去操作(读/写)data中对应的数据。

数据代理提现在{{name}}与data下的name属性,_data收集了data中数据,创建实例进行数据代理

let obj1={x:1}
let obj2={y:2}Object.defineProperty(obj,'x', {get(){
return obj1.x
},
set(value){
obj1.x=value;
}
})

:是v-bind的简写

@是v-on的简写

@监听事件

<script type="text/javascript">Vue.config.productionTip = falsevar vm = new Vue({el: '#root',data: {name: 'shangguigu',},methods: {showINFO(event) {//如果这里写成箭头函数,就会往外找,找成全局的windowalert('hello')// console.log(this)//此处的this是vm}}// 对象里配置方法,不用function关键词了//复习event target,拿到事件目标,event.target.innerText//所有被vue管理的函数都不能写箭头函数,不然就变成window// 用配置项把事件回调配置进})</script>

现在函数showinfo里面只能传参一个,event,后面的都会变成undefined

<body><div id="root"><h2>欢迎{{name}}</h2><button v-on:click="showINFO">点我提示信息</button><button v-on:click="showINFO1($event,66)">点我提示信息</button></div></body>
<script type="text/javascript">Vue.config.productionTip = falsevar vm = new Vue({el: '#root',data: {name: 'shangguigu',},methods: {showINFO(event) {//如果这里写成箭头函数,就会往外找,找成全局的windowalert('hello')// console.log(this)//此处的this是vm},showINFO1(event, number) {// 这里形参要按照showinfo的来//如果这里写成箭头函数,就会往外找,找成全局的windowalert('hello')console.log(event, number)//此处的this是vm}}// 对象里配置方法,不用function关键词了//复习event target,拿到事件目标,event.target.innerText//所有被vue管理的函数都不能写箭头函数,不然就变成window// 用配置项把事件回调配置进})</script>


​​​​​​​showinfo作为函数没有数据代理,因为后续不会更改,做数据代理是之后会改且要显示到界面上

总结:

1使用v-on:? 或者@?绑定事件,?为事件名
2事件回调需要配置在methods对象里,最终出现在vm里
3 methods里配置的函数,不用箭头函数,否则this不是vm是windows
4 methods中配置的函数,是被vue管理的函数,this指向是vm或组件实例对象
5@click="demo"   @click="demo($event)"效果一样但是后者可以传参数

事件处理

<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><script type="text/javascript" src="js/vue.js"></script><style>* {margin-top: 20px;}.demo1 {height: 50px;background-color: blueviolet;}</style>
</head><body><div id="root"><h2>welcome to {{name}}</h2><a href="www.baidu.com" @click.prevent="showinfo">SHOW INFO</a><div class="demo1" @click="showinfo"><button @click.stop="showinfo">show button info</button><!-- 冒泡逐级向上,想阻止就从你想阻止的层数及往下的click后都加stop,一般冒泡阶段处理事件 --></div></div></body>
<script type="text/javascript">new Vue({el: '#root',data: {name: 'sun'},methods: {showinfo(e) {// e.preventDefault()这句话替代方式是@click那边改的alert('hello')}}})</script>

vue中事件修饰符
1 prevent 阻止默认事件发生
2 stop阻止事件冒泡
3 once事件只触发一次

键盘事件

vue中常见别名:
1 回车:enter
2 删除 delete
3 退出 esc
4空格 space
5 换行 tab
6上up
 

最好通过key,即该键的键名来绑定,最好别用keyCode绑定

<body><div id="root"><h2>welcome {{name}}</h2><input type="text" placeholder="input" @keyup.enter="showinfo"><!-- 加上.enter代表按下空格键才会调用showinfo函数 --><!-- key代表的是这个键的名字,keyCode才是这个键的编码,比如可写成caps-lock --><!-- 记住,tab键不能keyup只能keydown绑定 --></div></body>
<script type="text/javascript">new Vue({el: '#root',data: {name: 'sun'},methods: {showinfo(e) {// if (e.keyCode !== 13) return// 这句判断可以用键盘事件后续加enterconsole.log(e.key,e.keyCode)alert(e.target.value)// 通过keycode判断ascii大小}}})</script>
Vue.config.keyCodes.huiche=13//定义别名huiche是回车

如果既要不冒泡又要不默认事件:可以如下修饰符连着写 

@click.stop.prevent

keyup对于ctrl键需要再配合一个任意键才能触发,如果想确认这个任意键,应该这样写:

@click.keyup.ctrl.y

 实现姓和名动态变化输出全名也变化:

v-bind是vue里数据绑定的界面那个属性的,所以变的是实例里的数据,界面属性随之变化

<body><div id="root">姓:<input type="text" v-model="firstName"><br />名:<input type="text" v-model="lastName"><br /><!-- 用v-bind实现绑定效果,简写:能够获得你之前在input里输入的东西,现在要动态绑定,即你再输入要随之变化改用model,简写v-model -->姓名:<span>{{firstName}}-{{lastName}}</span><!-- value是默认值,placeholder你一输入就跳没了 --></div></body>
<script type="text/javascript">Vue.config.productionTip = falsenew Vue({el: '#root',// el确定实例操纵哪个元素data: {firstName: 'zhang',lastName: 'san'}})</script>

用method完成: 

<body><div id="root">姓:<input type="text" v-model="firstName"><br />名:<input type="text" v-model="lastName"><br /><!-- 用v-bind实现绑定效果,简写:能够获得你之前在input里输入的东西,现在要动态绑定,即你再输入要随之变化改用model,简写v-model -->姓名:<span>{{fullName()}}</span><!-- value是默认值,placeholder你一输入就跳没了 --></div></body>
<script type="text/javascript">Vue.config.productionTip = falsenew Vue({el: '#root',// el确定实例操纵哪个元素data: {firstName: 'zhang',lastName: 'san'},// 只要data中的数据发生变化,一定会重新解析模板,遇到插值{{}}方法一定重新调用一遍methods: {fullName() {console.log('@---fullname')return this.firstName + '-' + this.lastName}}})</script>

遇到问题:总是debugger模式暂停运行:

这篇关于数据绑定,defineProperty,v-on,事件处理的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/609658

相关文章

一文教你Python如何快速精准抓取网页数据

《一文教你Python如何快速精准抓取网页数据》这篇文章主要为大家详细介绍了如何利用Python实现快速精准抓取网页数据,文中的示例代码简洁易懂,具有一定的借鉴价值,有需要的小伙伴可以了解下... 目录1. 准备工作2. 基础爬虫实现3. 高级功能扩展3.1 抓取文章详情3.2 保存数据到文件4. 完整示例

使用Java将各种数据写入Excel表格的操作示例

《使用Java将各种数据写入Excel表格的操作示例》在数据处理与管理领域,Excel凭借其强大的功能和广泛的应用,成为了数据存储与展示的重要工具,在Java开发过程中,常常需要将不同类型的数据,本文... 目录前言安装免费Java库1. 写入文本、或数值到 Excel单元格2. 写入数组到 Excel表格

python处理带有时区的日期和时间数据

《python处理带有时区的日期和时间数据》这篇文章主要为大家详细介绍了如何在Python中使用pytz库处理时区信息,包括获取当前UTC时间,转换为特定时区等,有需要的小伙伴可以参考一下... 目录时区基本信息python datetime使用timezonepandas处理时区数据知识延展时区基本信息

Qt实现网络数据解析的方法总结

《Qt实现网络数据解析的方法总结》在Qt中解析网络数据通常涉及接收原始字节流,并将其转换为有意义的应用层数据,这篇文章为大家介绍了详细步骤和示例,感兴趣的小伙伴可以了解下... 目录1. 网络数据接收2. 缓冲区管理(处理粘包/拆包)3. 常见数据格式解析3.1 jsON解析3.2 XML解析3.3 自定义

SpringMVC 通过ajax 前后端数据交互的实现方法

《SpringMVC通过ajax前后端数据交互的实现方法》:本文主要介绍SpringMVC通过ajax前后端数据交互的实现方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价... 在前端的开发过程中,经常在html页面通过AJAX进行前后端数据的交互,SpringMVC的controll

Pandas统计每行数据中的空值的方法示例

《Pandas统计每行数据中的空值的方法示例》处理缺失数据(NaN值)是一个非常常见的问题,本文主要介绍了Pandas统计每行数据中的空值的方法示例,具有一定的参考价值,感兴趣的可以了解一下... 目录什么是空值?为什么要统计空值?准备工作创建示例数据统计每行空值数量进一步分析www.chinasem.cn处

如何使用 Python 读取 Excel 数据

《如何使用Python读取Excel数据》:本文主要介绍使用Python读取Excel数据的详细教程,通过pandas和openpyxl,你可以轻松读取Excel文件,并进行各种数据处理操... 目录使用 python 读取 Excel 数据的详细教程1. 安装必要的依赖2. 读取 Excel 文件3. 读

Spring 请求之传递 JSON 数据的操作方法

《Spring请求之传递JSON数据的操作方法》JSON就是一种数据格式,有自己的格式和语法,使用文本表示一个对象或数组的信息,因此JSON本质是字符串,主要负责在不同的语言中数据传递和交换,这... 目录jsON 概念JSON 语法JSON 的语法JSON 的两种结构JSON 字符串和 Java 对象互转

C++如何通过Qt反射机制实现数据类序列化

《C++如何通过Qt反射机制实现数据类序列化》在C++工程中经常需要使用数据类,并对数据类进行存储、打印、调试等操作,所以本文就来聊聊C++如何通过Qt反射机制实现数据类序列化吧... 目录设计预期设计思路代码实现使用方法在 C++ 工程中经常需要使用数据类,并对数据类进行存储、打印、调试等操作。由于数据类

SpringBoot使用GZIP压缩反回数据问题

《SpringBoot使用GZIP压缩反回数据问题》:本文主要介绍SpringBoot使用GZIP压缩反回数据问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录SpringBoot使用GZIP压缩反回数据1、初识gzip2、gzip是什么,可以干什么?3、Spr