Vue.js知识点学习的一点笔记

news2024/11/24 11:33:31

一、虚拟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 

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

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

相关文章

CAD VCL Multiplatform Crack

CAD VCL Multiplatform Crack CAD VCL多平台是在Delphi和CBuilder中开发应用程序的一个组件。它允许创建、可视化、导入、导出、转换和打印图形。开发人员可以访问实体的属性。CAD VCL多平台支持大量矢量和3D格式&#xff0c;包括AutoCAD DWG/DXF、HPGL、STEP、IGES、STL、SVG、…

Excel带数值的计算公式

问题描述 如图&#xff0c;想实现在第三列单元格中实现带数值的计算表达式 解决方法 单元格 & "/" & 单元格 & "" & TEXT(单元格/单元格, "0.00%")& 为简单的 与 符号 最后设定单元格数值与格式&#xff08;保留两位小数…

[Mac软件]AutoCAD 2024 for Mac(cad2024) v2024.3.61.182中文版支持M1/M2/intel

下载地址&#xff1a;前往黑果魏叔官网 AutoCAD是一款计算机辅助设计&#xff08;CAD&#xff09;软件&#xff0c;目前已经成为全球最受欢迎的CAD软件之一。它可以在二维和三维空间中创建精确的技术绘图&#xff0c;并且可以应用于各种行业&#xff0c;如建筑、土木工程、机械…

天锐绿盾安全U盘系统

安全U盘系统 01 简介 天锐绿盾安全U盘系统&#xff0c;是一款致力于保障U盘数据内容安全的产品。通过严格身份认证、便捷安全的密保机制、智能的U盘锁定或自毁设置、详细的文件操作日志、文件粉碎、设置还原等&#xff0c;天锐绿盾安全U盘系统为您U盘的数据保驾护航&#xff0…

2023年京东儿童智能手表行业数据分析(京东销售数据分析)

儿童消费市场向来火爆&#xff0c;儿童智能手表作为能够实现定位导航&#xff0c;信息通讯&#xff0c;SOS求救&#xff0c;远程监听&#xff0c;智能防丢等多功能的智能可穿戴设备&#xff0c;能够通过较为精准的定位功能和安全防护能力保障儿童的安全&#xff0c;因而广受消费…

子集-回溯方法

class Solution {//题解思路//LinkedList<Integer> path new LinkedList<>(); List<List<Integer>> results new ArrayList<>();public List<List<Integer>> subsets(int[] nums) {//主方法中调用方法同时传入指定的参数初始值bac…

酷开科技大屏营销,锁定目标人群助力营销投放

近日&#xff0c;中科网联发布《2023年中国家庭大屏白皮书》&#xff0c;数据显示智能电视近三年内使用人群增长平稳。全国4.94亿家庭户中&#xff0c;智能大屏渗透率近九成。不仅如此&#xff0c; CCData研究预测&#xff0c;2025年中国智能电视渗透率将达到95%以上。这与三年…

Flink、Yarn架构,以Flink on Yarn部署原理详解

Flink、Yarn架构&#xff0c;以Flink on Yarn部署原理详解 Flink 架构概览 Apache Flink是一个开源的分布式流处理框架&#xff0c;它可以处理实时数据流和批处理数据。Flink的架构原理是其实现的基础&#xff0c;架构原理可以分为以下四个部分&#xff1a;JobManager、TaskM…

华为云Stack的学习(一)

一、华为云Stack架构 1.HCS 物理分散、逻辑统一、业务驱动、运管协同、业务感知 2.华为云Stack的特点 可靠性 包括整体可靠性、数据可靠性和单一设备可靠性。通过云平台的分布式架构&#xff0c;从整体系统上提高可靠性&#xff0c;降低系统对单设备可靠性的要求。 可用性…

Shell编程及自动化运维实现

Linux Shell编程及自动化运维实现 变量 Linux Shell编程及自动化运维实现 判断 Linux Shell编程及自动化运维实现 循环 Linux Shell编程及自动化运维实现 数组和函数 Linux Shell编程及自动化运维实现 三剑客 Linux Shell编程及自动化运维实现 综合实战 什么是…

人工智能原理(7)

目录 一、专家系统 1、概述 2、专家系统的结构和类型 二、基于规则的专家系统 1、基于规则的专家系统的基本结构 2、基于规则的专家系统的特点 3、举例 三、基于框架的专家系统 1、概念 2、继承、槽和方法 3、举例 四、基于模型的专家系统 1、概念 2、举例 五…

Kafka基本使用

查看Kafka的进程是否在运行 #命令行终端中运行如下命令 ps -ef | grep kafkafind / -iname kafka-server-start.shcd /usr/local/kafka/bin/#启动kafka ./kafka-server-start.sh -daemon /usr/local/kafka/config/server.propertiesKafka默认使用9092端口提供服务&#xf…

结构型(二) - 桥接模式

一、概念 桥接模式&#xff08;Bridge Pattern&#xff09;&#xff1a;是用于把抽象化与实现化解耦&#xff0c;使得二者可以独立变化。它通过提供抽象化和实现化之间的桥接结构&#xff0c;来实现二者的解耦。 另一种理解方式&#xff1a;一个类存在两个&#xff08;或多个…

bh002- Blazor hybrid / Maui 保存设置快速教程

1. 建立工程 bh002_ORM 源码 2. 添加 nuget 包 <PackageReference Include"BootstrapBlazor.WebAPI" Version"7.*" /> <PackageReference Include"FreeSql" Version"*" /> <PackageReference Include"FreeSql.…

若依Service多次查询分页失效(附详细解决方法)

【版权所有&#xff0c;文章允许转载&#xff0c;但须以链接方式注明源地址&#xff0c;否则追究法律责任】【创作不易&#xff0c;点个赞就是对我最大的支持】 前言 仅作为学习笔记&#xff0c;供大家参考 总结的不错的话&#xff0c;记得点赞收藏关注哦&#xff01; 目录 …

评测凯迪仕K70「千里眼」智能锁:不忘安全初心,便捷体验更上一层

能打败凯迪仕的&#xff0c;只有它自己。这是我们在体验过凯迪仕最新旗舰产品K70「千里眼」智能锁之后的感受。作为凯迪仕2023年最新旗舰机型&#xff0c;K70「千里眼」智能锁在配置上可以说是「机皇」般的存在。3K超高清智能锁猫眼、车规级24GHz雷达、大小双屏设计、三方可视对…

panda3d加载模型复习和python面向对象编程属性学习

运行一个python示例&#xff1b;然后去除一些代码&#xff0c;只剩下加载模型相关&#xff0c;如下&#xff1b; from panda3d.core import loadPrcFileData # Configure the parallax mapping settings (these are just the defaults) loadPrcFileData("", "p…

ROS2 学习(五)接口,动作

接口 通信双方统一规定好接口。比如图像 img&#xff0c;控制运动的线速度和角速度…… 我们也不用了解具体实现&#xff0c;基本就是了解接口会去用就行。 $ ros2 interface list # 展示所有 interfaces $ ros2 interface show ... # 显示具体一个 interface $ ros2 package…

Jenkins工具系列 —— 配置邮箱 每个job下动态设置临时发送人

文章目录 安装插件添加邮箱认证邮箱申请&#xff08;以QQ邮箱网页为例&#xff09;jenkins添加邮箱认证 jenkins设置邮箱相关信息配置全局邮件单个JOB邮箱配置 安装插件 点击 左侧的 Manage Jenkins —> Plugins ——> 左侧的 Available plugins 添加邮箱认证 邮箱申请…

如何进行电脑文件夹分类与整理?

本科电脑用了四年&#xff0c;毕业后发现空间很满&#xff0c;但是真正有用的东西仿佛就一点。好像是在学开发的时候&#xff0c;听到一个老师说&#xff0c;根目录不要放太多文件夹&#xff0c;不然就相当于没有根目录了。刚好研究生有了新的台式电脑&#xff0c;开始有规划的…