Vue.js知识点学习的一点笔记
一、虚拟DOM
1、原生JS是命令式编程,当渲染在页面的数据发生一点点变化,需要整个重新渲染一编。vue.js渐进式框架有个虚拟DOM的概念,运用diff算法,比较新旧数据,相同的数据不变不重渲染,不同的部分新数据覆盖旧数据。
二、MVVM
1、MV:M是数据‘模块’,V是DOM元素‘视图’
2、VM:是指Vue对象实例。是M和V联系的桥梁
三、数据代理
1、Object.defineProperty()
let a={x:9};
let b={y:1};
Object.defineProperty(b,'x',{
get(){
return a.x ;
} ,
set(value){
a.x=value
} ,
})
2、输出vue实例对象,data下的数据存放在vm的_data对象中。而dom元素插值数据是从vm下的取的属性值。也就是说vue封装了数据代理机制(底层用了Object.defineProperty()方法)。

四、事件修饰
0、@click=handle(event)等价于@click=handle($event)
1、prevent:阻止默认行为,比如a表亲啊加链接的跳转行为会被阻止;
2、stop:阻止冒泡事件;
3、onece:事件只能执行一次;
4、capture:冒泡模式切换成捕获模式;
5、self:只有事件发生在自己身上(不是因为冒泡或者捕获触发的事件)才会触发事件;
6、passive:比如@wheel事件,只有执行完方法里的代码才会回调滚动滚动条,加了passive,会先滚动滚动条再执行方法里的行为。
7、事件修饰可以连着写,比如:@click.prevent.stop=handle()
五、键盘事件
1、event.key获取键盘按键的名称,evant.keycode获取键盘按键的代码
2、@keydown,@keyup
3、常用按键名称:enter、tab(只对@keydown有效)、eac、delete、space、top、bottom、left、right
4、特殊用法的几个按键:ctrl、alt、shift、meta
配合@keyup使用:按下按键,配合其他按键再释放其他按键,触发事件,比如ctrl+s再释放s键
配合@keydown用:正常使用
当配合@keyup使用的时候,可以指定另一个按键,如:@keyup.ctrl.k=handle(),这样就只能配合k使用了。
5、也可以配合使用按键的keycode(随时会停止维护,不推荐)
6、自定义键名:vue实例外,Vue.keycodes.自定义建名=按键编码
六、插值语法{{}}、方法methods、计算属性computed
1、当任意数据发生改变时,dom元素和插值语法中的数据或者方法(写插值语法中的防范必须带括号)会重新解析一遍
2、而计算属性只会初次加载和相关联数据发生改变的时候才会触发计算属性重新解析,因为计算属性可以缓存数据
3、计算属性中有getter方法和setter方法,当只有getter方法,没有setter方法的时候,计算属性可以简写,写在插值语法中的方法名可以不带括号
computed:{
get:function handle(){
return this.a;
},
}
简写:
computed:{
handle() {
return this.a;
},
}
七、 监视、深度监视、另一种写法、简写
1、监视:当data中的属性或者computed计算属性发生改变回调的方法。如果将immediate属性改为true,则每次进入页面的时候自动对该属性进行一次监视。
data:{
a:1,
},
watch:{
a:{
immediate:true,
handler(newValue,oldValue){
console.log("a发生改变了!")
}
}
}
2、 深度监视:当属性是嵌套的对象,监视属性中的某个属性变化,就是深度监视
如
data:{
a:{
b:2,
c:3,
}
}
//1、此时要监视a属性中的b发生变化后的回调,则加引号,读取对象a的b值
watch:{
"a.b":{
handler(newValue,oldValue){
console.log("a的b发生改变了!")
}
}
}
//2、那如果是监测a对象(a对象地址,即a={o:9})发生改变的回调呢?
watch:{
a:{
immediate:true,
handler(newValue,oldValue){
console.log("a发生改变了!")
}
}
}
//3、那如果是监测a对象中任一值发生改变的回调呢?答:将deep属性改为true值。
watch:{
a:{
deep:true,
handler(newValue,oldValue){
console.log("a的某某值发生改变了!")
}
}
}
3、深度监视:
【1】Vue中的watch默认不监测对象内部值的改变(只监测一层)
【2】加deep属性,改为true值,watch可以检测对象内部值的改变(可以检测对象多层嵌套层里面的值)
【3】但是,Vue自身是可以检测到对象内部多层数据的改变,只是Vue提供的watch属性不允许。
4、监视、深度监视,还可以这样写:
const vm=new Vue({
data:{
a:1,
}
});
vm.$watch(a,(
handle(newValue,oldValue){
console.log("a发生改变")
}
))
5、监视的简写:当只有handle回调,没有immediate、deep等其他配置项的时候,监视是可以像getter一样监视的
简写1:
watch:{
a(newValue,oldValue){
console.log("a发生改变了!")
}
}
简写2:
vm.$watch(a,function(newValue,oldValue){
console.log("a发生改变了!")
})
八、computed计算属性和watch侦听
1、computed能办到的,watch也能办到,watch能办到的computed不一定能办到,比如,watch中可以写异步函数,computed中不能写异步函数
九、什么时候用箭头函数
1、非Vue管理的函数(定时器、Promise、axios等回调函数),里面用箭头函数,这样用的this指向的是vm Vue实例或组件实例对象。
2、所有Vue管理的函数,最好写成普通函数
十、Vue侦听和watch侦听原理
1、一斑窥豹

【1】未添加setter和getter方法的对象打印出来是这样的:

【2】添加setter和getter方法的对象打印出来是这样的:
2、如果在对象本身上添加setter会造成无线递归,内存溢出,所以封装一个类似Observer的构造函数在另一人身上复刻属性并添加setter和getter方法


[异常:RangeError: Maximum call stack size exceeded at Object.get [as name]
范围错去:name属性超过Object处的最大调用堆栈大小。
3、Vue封装了一个递归查询,可以找出对象嵌套多层中的对象,并为之添加setter和getter方法,直到最后不是对象类型的数据为止,如数组、字符串、数字、Boolean、null、undefined等等。
4、 为所有哪怕深层嵌套的对象添加setter和getter之后,会将其拷贝到vm._data中,紧接着,将vm._data数据代理到vm自身上。实现Vue框架上的dom元素可实时获取vm身上的数据。如{{information.name}}。
十一、从Vue侦听原理得出,未添加setter和getter方法的非对象类属性,是不可被直接更改的
问题 一:
点击按钮,往对象a中添加一个属性b,页面不呈现b的值。是因为Vue没有侦听到b属性,b属性不具备getter和setter操作。

点击之后,数据不呈现:

2、解决办法:
【1】把a对象这个数据更新一遍,因为a身上有getter和setter:this.a={......}。
【2】用Vue自身上的set方法添加属性:Vue.set(target,key,value)。比如:Vue.set(a,'b','你很好真的很好!')。或者:this.$set(target,key,value)。效果一样。
【3】注意不能再vm自身或者根目录上,比如vm._data用set方法。
问题二:
同理,直接添加或者修改不被setter和getter的数组呢?
比如:对象里面放数组,数组里面对象,但凡对象都有setter和getter,那么中间一层的数组没有setter二号getter,那么,直接改变数组的话,页面不呈现改变后端信息!

解决办法:
【1】用this.$set(persons,0,{id:"001},name:"马老师",age:50,sex:"男")
【2】用Vue封装的操作数组:push() pop() shift() unshift() splice() sort() reserve()
<1>这些方法本质做了两件事:1、包裹Array原型链上的原生方法;2、重新解析解析模板进而更新页面。
十二、常用命令
1、v-bind 语法糖——>“:”
2、v-model
3、v-if v-else-if v-else
4、v-on 语法糖——>"@"
5、v-show
6、v-click v-事件,指令遇到驼峰命名,改大写为-作为衔接符号,比如:v-caps-lock
7、v-cloak ,后面不加属性,表示当vue接管dom容器的时候,删除原来的带v-cloak的dom,用于js阻塞情景,和css样式结合使用:如overflow:hidden;
8、v-once
9、v-pre 后面不加属性,加了该指令的dom不被解析,跳过解析,解析后面的dom
10、v-text 不解析标签
11、v-html 能解析标签,存在安全隐患,容易收到XSS攻击
十三、自定义指令
往vue实例种添加配置项(类似于data mehods computed等):directives:{}
两种形式:1、函数形式,2、对象形式
element参数:是自定义指令所绑的dom元素
binding参数:自定义指令可以绑定属性,比如<input v-fbind:value="name" type=“text”>

2、自定义指令遇到定义名称为驼峰命名,使用指令名称用-衔接,例如lookYou,使用的时候是:
v-look-you。
3、directives配置项中的this指向的是window
4、配置全局指令:
Vue.directive("bind",{
函数形式或者对象形式的属性
})
十四、mixin混合
1、建一个混入js文件:mixin.js,里面放一个对象并导出,里面放data、methods、mounted等配置项:

2、 再在组件中引入混合文件对象如:import {hunhe1,hunhe2} from './mixin.js'
3、通过mixins配置项
mixins:["hunhe1","hunhe2"]

十五、插件
1、创建js后缀文件,在里面创建一个对象并export导出,
2、对象中放install(Vue,option){}方法,参数Vue,就是方法中的可以获取Vue构造函数,Vue身上的方法属性随便用
3、install方法中可以写全局配置项目:
【1】全局Vue.filter("将调用的过滤名称",{......过滤动作})
【2】自定义全局指令:Vue.directive(“名称”,function(element,bingding){......})
【3】全局混入:Vue.mixin({。。。。。})

【4】还可以:Vue.prototype."方法或者属性名称"=。。。。
【5】在main.js中引入插件文件如 import plugin from './plugin.js'(局部输出加花括号并且引入名称由局部输出的名称决定,默认呼出,不加花括号,引入名称可以自定义),再在下面Vue.use(plugin) ,
经过上面的操作后,自定义的全局过滤器、全局指令、全局混入、方法、属性,在所有组件中可以在dom元素中直接使用,vm实例下获取:r如:this.x //100。
十六、脚手架依托于webpack
1、获取webpack的所有版本信息:
npmv view webpack versions
十七、mapState mapGatters

十八、mapMutations mapStations


3、namspaced:true
相关文章:
Vue.js知识点学习的一点笔记
一、虚拟DOM 1、原生JS是命令式编程,当渲染在页面的数据发生一点点变化,需要整个重新渲染一编。vue.js渐进式框架有个虚拟DOM的概念,运用diff算法,比较新旧数据,相同的数据不变不重渲染,不同的部分新数据…...
Sui第四轮资助:16个团队瓜分
近日,Sui基金会公布了第四轮开发者资助名单,受助项目均是集中在DeFi、支付、基础设施、游戏、预言机等领域的Sui生态项目,他们是从2023年7月1日之前提交的申请中选出的。在此时间之后提交的任何项目目前正在审查中。 在前三轮资助中累积发放…...
ATC模型转换环境问题案例
ATC(Ascend Tensor Compiler)是异构计算架构CANN体系下的模型转换工具:它可以将开源框架的网络模型(如TensorFlow等)以及Ascend IR定义的单算子描述文件转换为昇腾AI处理器支持的离线模型;模型转换过程中&a…...
dart其他语法
dart其他语法 类型相关 空安全 不能将一个普通类型对象赋值为 null 避免 为空 报错:对 null 的使用语法进行限制(str ! null)对空安全的允诺 late 延迟初始化的时机 ! 在此时该可用变量一定不为空 void main() {String name zh…...
C++11并发与多线程笔记(7) 单例设计模式共享数据分析、解决,call_once
C11并发与多线程笔记(7) 单例设计模式共享数据分析、解决,call_once 1.设计模式2.单例设计模式:3.单例设计模式共享数据分析、解决4.std::call_once(): 1.设计模式 程序灵活,维护起来可能方便,…...
FANUC机器人加减速倍率指令ACC的使用方法说明
FANUC机器人加减速倍率指令ACC的使用方法说明 单位有一台FANUC机器人(型号:M-900iB 360kg),偶尔会在启动的瞬间会报SRVO-050碰撞检测报警,而事实上机器人并没有开始移动或和其他工件产生碰撞,一直查了很长时间,也没有查到具体的原因,也尝试过重新进行负载推算,但是偶尔…...
奥威BI数据可视化工具:360度呈现数据,告别枯燥表格
随着企业数据量的不断增加,如何有效地进行数据分析与决策变得越来越重要。奥威BI数据可视化工具作为一款强大的数据分析工具,在帮助企业深入挖掘数据价值方面具有显著优势。 奥威BI数据可视化工具是一款基于数据仓库技术的数据分析工具,具有…...
C# Linq源码分析之Take (三)
概要 本文在前两篇Take源码分析的基础上,着重分析Range参数中有倒数的情况,即分析TakeRangeFromEndIterator的源码实现。 源码及分析 TakeRangeFromEndIterator方法用于处理Range中的开始和结束索引存在倒数的情况。该方法位于Take.cs文件中。通过yie…...
Linux journalctl命令详解(journalctl指令)(systemd服务默认日志管理工具)
文章目录 Linux Journalctl命令详解1. Journalctl简介2. Journalctl基础使用3. 过滤日志条目4. 时间戳和日志轮转5. 高级应用6. journalctl --help指令文档英文中文 注意事项journal日志不会将程序输出的空行显示,日志会被压缩得满满当当。journal日志不会自动持久化…...
学习内容--
C后台开发_c做后台_人面桃花相映红的博客-CSDN博客 C/C后端开发学习路线总结(附带实习学习经历分享)_c后端开发需要学什么_Linux后台开发狮的博客-CSDN博客 学到什么程度才可以面试大厂?c/c后台开发进阶指南 后端开发(超全&…...
Stable Diffusion:使用自己的数据集微调训练LoRA模型
Stable Diffusion:使用自己的数据集微调训练LoRA模型 前言前提条件相关介绍微调训练LoRA模型下载kohya_ss项目安装kohya_ss项目运行kohya_ss项目准备数据集生成关键词模型参数设置预训练模型设置文件夹设置训练参数设置 开始训练LoRA模型TensorBoard查看训练情况 测…...
软考高级系统架构设计师系列之:论文典型试题写作要点和写作素材总结系列文章一
软考高级系统架构设计师系列之:论文典型试题写作要点和写作素材总结系列文章一 一、论软件体系结构风格及其应用1.论文题目2.写作要点和写作素材二、论开放系统应用的互操作性技术1.论文题目2.写作要点和写作素材三、论多层分布结构系统的开发1.论文题目2.写作要点和写作素材四…...
06 mysql all查询 和 主键查询 和 非索引列查询
前言 本文主要调试一下 mysql 的如下两种查询语句 我们也来深入的看一下, 究竟如下两个普通的查询, mysql 做了什么事情 1. select * from user where id 991; 2. select * from user; 3. select * from user where name jerry991; 环境介绍 测试表 user schema 如下…...
黑马点评-项目集成git及redis实现短信验证码登录
目录 IDEA集成git 传统session存在的问题 redis方案 业务流程 选用的数据结构 整体访问流程 发送短信验证码 获取校验验证码 配置登录拦截器 拦截器注册配置类 拦截器 用户状态刷新问题 刷新问题解决方案 IDEA集成git 远程仓库采用码云,创建好仓库&…...
mac苹果电脑怎么运行Windows软件?怎么安装Win虚拟机?
近年来,苹果电脑的用户群体不断扩大,许多用户对于苹果电脑是否可以运行Windows软件产生了疑问。苹果电脑和Windows操作系统有着明显的区别,是否能够在苹果电脑上运行Windows软件。下面我们就来看苹果电脑可以运行Windows软件吗,苹…...
Jmeter对websocket进行测试
JMeterWebSocketSampler-1.0.2-SNAPSHOT.jar下载 公司使用websocket比较奇怪,需要带认证信息进行长连接,通过websocket插件是请求失败,如下图,后面通过代码实现随再打包jar包完成websocket测试 本地实现代码如下: pa…...
从2023年世界机器人大会发现机器人新趋势
机器人零部件为何成2023年世界机器人大会关注热门? 在原先,机器人的三大核心零部件是控制系统中的控制器、驱动系统中的伺服电机和机械系统中的精密减速器。如今,机器人的主体框架结构已经落实,更多机器人已经开始深入到各类场景中…...
Kafka单节点部署
🎈 作者:互联网-小啊宇 🎈 简介: CSDN 运维领域创作者、阿里云专家博主。目前从事 Kubernetes运维相关工作,擅长Linux系统运维、开源监控软件维护、Kubernetes容器技术、CI/CD持续集成、自动化运维、开源软件部署维护…...
生成式AI和大语言模型 Generative AI LLMs
在“使用大型语言模型(LLMs)的生成性AI”中,您将学习生成性AI的基本工作原理,以及如何在实际应用中部署它。 通过参加这门课程,您将学会: 深入了解生成性AI,描述基于LLM的典型生成性AI生命周期中的关键步骤ÿ…...
Obsidian 入门使用手册
文章目录 一、Obsidian 入门1.1 什么是 Obsidian1.2 安装 Obsidian 二、Obsidian 配置2.1 创建第一个笔记2.2 设置界面语言使用中文2.3 主题 三、小结 一、Obsidian 入门 1.1 什么是 Obsidian Obsidian 是一款基于 Markdown 语法编辑的笔记软件。与传统的 Markdown 软件不同的…...
Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件
今天呢,博主的学习进度也是步入了Java Mybatis 框架,目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学,希望能对大家有所帮助,也特别欢迎大家指点不足之处,小生很乐意接受正确的建议&…...
屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!
5月28日,中天合创屋面分布式光伏发电项目顺利并网发电,该项目位于内蒙古自治区鄂尔多斯市乌审旗,项目利用中天合创聚乙烯、聚丙烯仓库屋面作为场地建设光伏电站,总装机容量为9.96MWp。 项目投运后,每年可节约标煤3670…...
相机从app启动流程
一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...
2025年渗透测试面试题总结-腾讯[实习]科恩实验室-安全工程师(题目+回答)
安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。 目录 腾讯[实习]科恩实验室-安全工程师 一、网络与协议 1. TCP三次握手 2. SYN扫描原理 3. HTTPS证书机制 二…...
三分算法与DeepSeek辅助证明是单峰函数
前置 单峰函数有唯一的最大值,最大值左侧的数值严格单调递增,最大值右侧的数值严格单调递减。 单谷函数有唯一的最小值,最小值左侧的数值严格单调递减,最小值右侧的数值严格单调递增。 三分的本质 三分和二分一样都是通过不断缩…...
【从零开始学习JVM | 第四篇】类加载器和双亲委派机制(高频面试题)
前言: 双亲委派机制对于面试这块来说非常重要,在实际开发中也是经常遇见需要打破双亲委派的需求,今天我们一起来探索一下什么是双亲委派机制,在此之前我们先介绍一下类的加载器。 目录 编辑 前言: 类加载器 1. …...
django blank 与 null的区别
1.blank blank控制表单验证时是否允许字段为空 2.null null控制数据库层面是否为空 但是,要注意以下几点: Django的表单验证与null无关:null参数控制的是数据库层面字段是否可以为NULL,而blank参数控制的是Django表单验证时字…...
DBLP数据库是什么?
DBLP(Digital Bibliography & Library Project)Computer Science Bibliography是全球著名的计算机科学出版物的开放书目数据库。DBLP所收录的期刊和会议论文质量较高,数据库文献更新速度很快,很好地反映了国际计算机科学学术研…...
Unity中的transform.up
2025年6月8日,周日下午 在Unity中,transform.up是Transform组件的一个属性,表示游戏对象在世界空间中的“上”方向(Y轴正方向),且会随对象旋转动态变化。以下是关键点解析: 基本定义 transfor…...
渗透实战PortSwigger靶场:lab13存储型DOM XSS详解
进来是需要留言的,先用做简单的 html 标签测试 发现面的</h1>不见了 数据包中找到了一个loadCommentsWithVulnerableEscapeHtml.js 他是把用户输入的<>进行 html 编码,输入的<>当成字符串处理回显到页面中,看来只是把用户输…...
