当前位置: 首页 > news >正文

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是命令式编程&#xff0c;当渲染在页面的数据发生一点点变化&#xff0c;需要整个重新渲染一编。vue.js渐进式框架有个虚拟DOM的概念&#xff0c;运用diff算法&#xff0c;比较新旧数据&#xff0c;相同的数据不变不重渲染&#xff0c;不同的部分新数据…...

Sui第四轮资助:16个团队瓜分

近日&#xff0c;Sui基金会公布了第四轮开发者资助名单&#xff0c;受助项目均是集中在DeFi、支付、基础设施、游戏、预言机等领域的Sui生态项目&#xff0c;他们是从2023年7月1日之前提交的申请中选出的。在此时间之后提交的任何项目目前正在审查中。 在前三轮资助中累积发放…...

ATC模型转换环境问题案例

ATC&#xff08;Ascend Tensor Compiler&#xff09;是异构计算架构CANN体系下的模型转换工具&#xff1a;它可以将开源框架的网络模型&#xff08;如TensorFlow等&#xff09;以及Ascend IR定义的单算子描述文件转换为昇腾AI处理器支持的离线模型&#xff1b;模型转换过程中&a…...

dart其他语法

dart其他语法 类型相关 空安全 不能将一个普通类型对象赋值为 null 避免 为空 报错&#xff1a;对 null 的使用语法进行限制&#xff08;str &#xff01; null&#xff09;对空安全的允诺 late 延迟初始化的时机 ! 在此时该可用变量一定不为空 void main() {String name zh…...

C++11并发与多线程笔记(7) 单例设计模式共享数据分析、解决,call_once

C11并发与多线程笔记&#xff08;7&#xff09; 单例设计模式共享数据分析、解决&#xff0c;call_once 1.设计模式2.单例设计模式&#xff1a;3.单例设计模式共享数据分析、解决4.std::call_once()&#xff1a; 1.设计模式 程序灵活&#xff0c;维护起来可能方便&#xff0c;…...

FANUC机器人加减速倍率指令ACC的使用方法说明

FANUC机器人加减速倍率指令ACC的使用方法说明 单位有一台FANUC机器人(型号:M-900iB 360kg),偶尔会在启动的瞬间会报SRVO-050碰撞检测报警,而事实上机器人并没有开始移动或和其他工件产生碰撞,一直查了很长时间,也没有查到具体的原因,也尝试过重新进行负载推算,但是偶尔…...

奥威BI数据可视化工具:360度呈现数据,告别枯燥表格

随着企业数据量的不断增加&#xff0c;如何有效地进行数据分析与决策变得越来越重要。奥威BI数据可视化工具作为一款强大的数据分析工具&#xff0c;在帮助企业深入挖掘数据价值方面具有显著优势。 奥威BI数据可视化工具是一款基于数据仓库技术的数据分析工具&#xff0c;具有…...

C# Linq源码分析之Take (三)

概要 本文在前两篇Take源码分析的基础上&#xff0c;着重分析Range参数中有倒数的情况&#xff0c;即分析TakeRangeFromEndIterator的源码实现。 源码及分析 TakeRangeFromEndIterator方法用于处理Range中的开始和结束索引存在倒数的情况。该方法位于Take.cs文件中。通过yie…...

Linux journalctl命令详解(journalctl指令)(systemd服务默认日志管理工具)

文章目录 Linux Journalctl命令详解1. Journalctl简介2. Journalctl基础使用3. 过滤日志条目4. 时间戳和日志轮转5. 高级应用6. journalctl --help指令文档英文中文 注意事项journal日志不会将程序输出的空行显示&#xff0c;日志会被压缩得满满当当。journal日志不会自动持久化…...

学习内容--

C后台开发_c做后台_人面桃花相映红的博客-CSDN博客 C/C后端开发学习路线总结&#xff08;附带实习学习经历分享&#xff09;_c后端开发需要学什么_Linux后台开发狮的博客-CSDN博客 学到什么程度才可以面试大厂&#xff1f;c/c后台开发进阶指南 后端开发&#xff08;超全&…...

Stable Diffusion:使用自己的数据集微调训练LoRA模型

Stable Diffusion&#xff1a;使用自己的数据集微调训练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 远程仓库采用码云&#xff0c;创建好仓库&…...

mac苹果电脑怎么运行Windows软件?怎么安装Win虚拟机?

近年来&#xff0c;苹果电脑的用户群体不断扩大&#xff0c;许多用户对于苹果电脑是否可以运行Windows软件产生了疑问。苹果电脑和Windows操作系统有着明显的区别&#xff0c;是否能够在苹果电脑上运行Windows软件。下面我们就来看苹果电脑可以运行Windows软件吗&#xff0c;苹…...

Jmeter对websocket进行测试

JMeterWebSocketSampler-1.0.2-SNAPSHOT.jar下载 公司使用websocket比较奇怪&#xff0c;需要带认证信息进行长连接&#xff0c;通过websocket插件是请求失败&#xff0c;如下图&#xff0c;后面通过代码实现随再打包jar包完成websocket测试 本地实现代码如下&#xff1a; pa…...

从2023年世界机器人大会发现机器人新趋势

机器人零部件为何成2023年世界机器人大会关注热门&#xff1f; 在原先&#xff0c;机器人的三大核心零部件是控制系统中的控制器、驱动系统中的伺服电机和机械系统中的精密减速器。如今&#xff0c;机器人的主体框架结构已经落实&#xff0c;更多机器人已经开始深入到各类场景中…...

Kafka单节点部署

&#x1f388; 作者&#xff1a;互联网-小啊宇 &#x1f388; 简介&#xff1a; CSDN 运维领域创作者、阿里云专家博主。目前从事 Kubernetes运维相关工作&#xff0c;擅长Linux系统运维、开源监控软件维护、Kubernetes容器技术、CI/CD持续集成、自动化运维、开源软件部署维护…...

生成式AI和大语言模型 Generative AI LLMs

在“使用大型语言模型(LLMs)的生成性AI”中&#xff0c;您将学习生成性AI的基本工作原理&#xff0c;以及如何在实际应用中部署它。 通过参加这门课程&#xff0c;您将学会&#xff1a; 深入了解生成性AI&#xff0c;描述基于LLM的典型生成性AI生命周期中的关键步骤&#xff…...

Obsidian 入门使用手册

文章目录 一、Obsidian 入门1.1 什么是 Obsidian1.2 安装 Obsidian 二、Obsidian 配置2.1 创建第一个笔记2.2 设置界面语言使用中文2.3 主题 三、小结 一、Obsidian 入门 1.1 什么是 Obsidian Obsidian 是一款基于 Markdown 语法编辑的笔记软件。与传统的 Markdown 软件不同的…...

【网络】每天掌握一个Linux命令 - iftop

在Linux系统中&#xff0c;iftop是网络管理的得力助手&#xff0c;能实时监控网络流量、连接情况等&#xff0c;帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...

Vue记事本应用实现教程

文章目录 1. 项目介绍2. 开发环境准备3. 设计应用界面4. 创建Vue实例和数据模型5. 实现记事本功能5.1 添加新记事项5.2 删除记事项5.3 清空所有记事 6. 添加样式7. 功能扩展&#xff1a;显示创建时间8. 功能扩展&#xff1a;记事项搜索9. 完整代码10. Vue知识点解析10.1 数据绑…...

连锁超市冷库节能解决方案:如何实现超市降本增效

在连锁超市冷库运营中&#xff0c;高能耗、设备损耗快、人工管理低效等问题长期困扰企业。御控冷库节能解决方案通过智能控制化霜、按需化霜、实时监控、故障诊断、自动预警、远程控制开关六大核心技术&#xff0c;实现年省电费15%-60%&#xff0c;且不改动原有装备、安装快捷、…...

转转集团旗下首家二手多品类循环仓店“超级转转”开业

6月9日&#xff0c;国内领先的循环经济企业转转集团旗下首家二手多品类循环仓店“超级转转”正式开业。 转转集团创始人兼CEO黄炜、转转循环时尚发起人朱珠、转转集团COO兼红布林CEO胡伟琨、王府井集团副总裁祝捷等出席了开业剪彩仪式。 据「TMT星球」了解&#xff0c;“超级…...

使用van-uploader 的UI组件,结合vue2如何实现图片上传组件的封装

以下是基于 vant-ui&#xff08;适配 Vue2 版本 &#xff09;实现截图中照片上传预览、删除功能&#xff0c;并封装成可复用组件的完整代码&#xff0c;包含样式和逻辑实现&#xff0c;可直接在 Vue2 项目中使用&#xff1a; 1. 封装的图片上传组件 ImageUploader.vue <te…...

从零实现STL哈希容器:unordered_map/unordered_set封装详解

本篇文章是对C学习的STL哈希容器自主实现部分的学习分享 希望也能为你带来些帮助~ 那咱们废话不多说&#xff0c;直接开始吧&#xff01; 一、源码结构分析 1. SGISTL30实现剖析 // hash_set核心结构 template <class Value, class HashFcn, ...> class hash_set {ty…...

Spring AI 入门:Java 开发者的生成式 AI 实践之路

一、Spring AI 简介 在人工智能技术快速迭代的今天&#xff0c;Spring AI 作为 Spring 生态系统的新生力量&#xff0c;正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务&#xff08;如 OpenAI、Anthropic&#xff09;的无缝对接&…...

在鸿蒙HarmonyOS 5中使用DevEco Studio实现录音机应用

1. 项目配置与权限设置 1.1 配置module.json5 {"module": {"requestPermissions": [{"name": "ohos.permission.MICROPHONE","reason": "录音需要麦克风权限"},{"name": "ohos.permission.WRITE…...

爬虫基础学习day2

# 爬虫设计领域 工商&#xff1a;企查查、天眼查短视频&#xff1a;抖音、快手、西瓜 ---> 飞瓜电商&#xff1a;京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空&#xff1a;抓取所有航空公司价格 ---> 去哪儿自媒体&#xff1a;采集自媒体数据进…...

vue3+vite项目中使用.env文件环境变量方法

vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量&#xff0c;这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...