数据绑定,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模式暂停运行:

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

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

相关文章

【GCC】6 接收端实现:周期构造RTCP反馈包

基于m98代码。GCC涉及的代码,可能位于:webrtc/modules/remote_bitrate_estimator webrtc/modules/congestion_controller webrtc/modules/rtp_rtcp/source/rtcp_packet/transport_feedback.cc webrtc 之 RemoteEstimatorProxy 对 remote_bitrate_estimator 的 RemoteEstimato…

线性表的应用 | 线性表的合并

线性表的合并 #include <iostream> using namespace std;#define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define INFEASIBLE -1 #define OVERFLOW -2typedef int Status;// 定义单链表 typedef struct LNode {int data;struct LNode *next; }LNode, *…

网络文件共享服务

一.存储类型 直连式存储&#xff1a;Direct-Attached Storage&#xff0c;简称DAS 存储区域网络&#xff1a;Storage Area Network&#xff0c;简称SAN&#xff08;可以使用空间&#xff0c;管理也是你来管理&#xff09; 网络附加存储&#xff1a;Network-Attached Storage&…

代码随想录 Leetcode18. 四数之和

题目&#xff1a; 代码&#xff08;首刷看解析 2024年1月15日&#xff09;&#xff1a; class Solution { public:vector<vector<int>> fourSum(vector<int>& nums, int target) {vector<vector<int>> result;sort(nums.begin(), nums.end(…

mac上部署单体hbase

1. 简介 HBase 是一个开源的、分布式的、版本化的典型非关系型数据库。它是 Google BigTable 的开源实现&#xff0c;并且是 Apache 基金会的 Hadoop 项目的一部分1。HBase 在 Hadoop Distributed File System (HDFS) 上运行&#xff0c;作为一个列式存储非关系数据库管理系统…

响应式编程初探-自定义实现Reactive Streams规范

最近在学响应式编程&#xff0c;这里先记录下&#xff0c;响应式编程的一些基础内容 1.名词解释 Reactive Streams、Reactor、WebFlux以及响应式编程之间存在密切的关系&#xff0c;它们共同构成了在Java生态系统中处理异步和响应式编程的一系列工具和框架。 Reactive Streams…

查看Linux系统内存、CPU、磁盘使用率和详细信息

一、查看内存占用 1、free # free -m 以MB为单位显示内存使用情况 [rootlocalhost ~]# free -mtotal used free shared buff/cache available Mem: 11852 1250 8668 410 1934 9873 Swap: 601…

【Kotlin】协程的字节码原理

前言 协程是Koltin语言最重要的特性之一&#xff0c;也是最难理解的特性。网上关于kotlin协程的描述也是五花八门&#xff0c;有人说它是轻量级线程&#xff0c;有人说它是无阻塞式挂起&#xff0c;有人说它是一个异步框架等等&#xff0c;众说纷芸。甚至还有人出了书籍专门介…

Linux用户提权

新建用户 用root账户修改文件&#xff0c;添加信任用户 使用sudo提权&#xff0c;可以使用 **root删除新建账户**

各种版本对应关系:SpringCloudAlibaba——SpringCloud——SpringBoot——SpringFramework——JDK

SpringCloudAlibaba——SpringCloud——SpringBoot——SpringFramework——JDK 一般情况&#xff0c;在https://github.com/项目/wiki目录下有发布信息及对应的要求其他依赖的版本信息SpringCloudAlibaba——SpringCloud——SpringBootSpringBoot和SpringFramework的版本对应关…

Web3的应用发展及其影响

Web3&#xff0c;又被称为去中心化Web&#xff0c;是互联网发展的一个阶段&#xff0c;其核心特点是数据的去中心化和用户自主权。近年来&#xff0c;随着区块链技术的不断成熟&#xff0c;Web3的应用也得到了广泛的关注和发展。在这篇文章中&#xff0c;我们将深入探讨Web3目前…

vuex的初步使用-1

1. 介绍 Vuex 是一个 Vue 的 状态管理工具&#xff0c;状态就是数据。 简单讲&#xff1a;Vuex 就是一个插件&#xff0c;可以帮我们管理 Vue 通用的数据 (多组件共享的数据)。相对于一个仓库&#xff1a;存放组件共享的数据。 2. 安装 vuex 安装vuex与vue-router类似&…

LabVIEW模拟荧光显微管滑动实验

LabVIEW模拟荧光显微管滑动实验 在现代生物医学研究中&#xff0c;对微观生物过程的精准模拟和观察至关重要。本案例展示了如何利用LabVIEW软件和专业硬件平台&#xff0c;创新地模拟荧光显微管在滑动实验中的动态行为&#xff0c;这一过程不仅提升了实验效率&#xff0c;还为…

Jenkins基础篇--添加用户和用户权限设置

添加用户 点击系统管理&#xff0c;点击管理用户&#xff0c;然后点击创建用户&#xff08;Create User&#xff09; 用户权限管理 点击系统管理&#xff0c;点击全局安全配置&#xff0c;找到授权策略&#xff0c;选择安全矩阵&#xff0c;配置好用户权限后&#xff0c;点击…

C++ 开发 + VSCode 调试

C 开发 VSCode 调试 MSYS2 安装 gcc、make下载安装MSMYS2pacman 添加镜像源 GCC1. 安装2. 查看结果3. 环境变量 GDB VSCode 调试所需插件创建项目调试代码1. tasks.json 配置任务2. launch.json 配置调试3. 运行 更进一步的 C/C 设置 参考资料 MSYS2 安装 gcc、make 下载 官…

1.16云支教(集合的概念、定义)

1.集合 1.集合的概念&#xff08;意思&#xff09; 把集合理解成一个塑料袋 要往塑料袋装什么&#xff0c; 装的元素就是里面装的各个东西&#xff0c; 表示方法 1。直接穷举 A{装的到底是什么&#xff08;竹子&#xff09;} 2.描述法 描述装的东西的性质&#xff0c;…

MySQL 从零开始:03 基本入门语句

文章目录 1、连接数据库1.1 命令提示符登陆1.2 MySQL 8.0 Command Line Client 登陆1.3 MySQL Workbench 登陆 2、基本语句2.1 查看所有库2.2 创建库2.3 删除库2.4 选择数据库2.5 查看表2.6 创建表2.7 删除表2.8 改表名2.9 清空表 在上一小节中介绍了 MySQL 数据库的安装&#…

统计学-R语言-4.1

文章目录 前言编写R函数图形的控制和布局par函数layout函数 练习 前言 安装完R软件之后就可以对其进行代码的编写了。 编写R函数 如果对数据分析有些特殊需要&#xff0c;已有的R包或函数不能满足&#xff0c;可以在R中编写自己的函数。函数的定义格式如下所示&#xff1a; …

找不到mfc100.dll的解决方法,怎么修复mfc100.dll文件

当我们在使用电脑时&#xff0c;时常可能会遇到各类系统提示的错误信息。"找不到mfc100.dll" 就是这些错误之一&#xff0c;该错误提示会妨碍我们执行一些应用程序或特定代码。为了帮助读者克服这个技术障碍&#xff0c;本篇文章将详尽阐明导致该问题的根本原因&…

白码CRM快速实现报价转订单功能

某crm项目已经做到销售模块了&#xff0c;销售模块实现了从报价到销售单&#xff0c;再到财务模块的应收流程。但使用过程中发现不好用的地方&#xff1a;报价通过后客户下单&#xff0c;销售相关人员又要重新录入数据一样的销售单&#xff0c;觉得这样的操作比较繁琐&#xff…