Vue.js------vue基础

  • 1. 能够了解更新监测, key作用, 虚拟DOM, diff算法
  • 2. 能够掌握设置动态样式
  • 3. 能够掌握过滤器, 计算属性, 侦听器
  • 4. 能够完成品牌管理案例

一.Vue基础_更新监测和key

1.v-for更新监测 

 目标:目标结构变化, 触发v-for的更新 

  • 情况1: 数组翻转
  • 情况2: 数组截取
  • 情况3: 更新值

 口诀:

数组变更方法, 就会导致v-for更新, 页面更新

  • push 方法是 JavaScript 数组对象的一个方法,用于向数组的末尾添加一个或多个新元素,并返回添加新元素后数组的新长度 
  • pop 方法是 JavaScript 数组对象的一个方法,用于移除数组的最后一个元素,并返回被移除的元素。
  • shift 方法是 JavaScript 数组对象的一个方法,用于移除数组的第一个元素,并返回被移除的元素。
  • unshift 方法是 JavaScript 数组对象的一个方法,用于向数组的开头添加一个或多个新元素,并返回添加新元素后数组的新长度。
  • splice 方法是 JavaScript 数组对象的一个方法,用于在指定位置插入或删除元素,并返回被删除的元素组成的数组。
  • sort 方法是 JavaScript 数组对象的一个方法,用于对数组的元素进行排序。默认情况下,sort 方法会将数组的元素转换为字符串,然后按照 Unicode 码点顺序进行排序。
  • reverse 方法是 JavaScript 数组对象的一个方法,用于颠倒数组中元素的顺序,即将数组中的元素从后向前排列。

数组非变更方法, 返回新数组, 就不会导致v-for更新, 可采用覆盖数组或this.$set() 

  • filter 方法可以帮助程序员方便地对数组进行筛选,从而得到符合特定条件的元素集合。
  •  

新建一个文件夹,用vscode打开文件,在用命令vue create demo创建项目

 

<template><div><ul><li v-for="(val,index) in arr" :key="index">{{ val }}</li></ul><button @click="revBtn">数组翻转</button><button @click="sliceBtn">截取前三个</button><button @click="updateBtn">点击改掉第一个元素的值</button></div>
</template><script>export default {data(){return {arr: [5,3,9,2,1]}},methods: {revBtn(){// 1.数据翻转可以让v-for更新this.arr.reverse()},sliceBtn(){// 2.数组slice方法不会造成v-for更新// slice不会改变原始数组this.arr.slice(0,3)// console.log(re)// 解决v-for更新 ---覆盖原始数组let newArr = this.arr.slice(0,3)this.arr = newArr},updateBtn(){// 3.更新某个值的时候,v-for是监测不到的// this.arr[0] = 1000;// 解决-This.$set()// 参数1:更新目标结构// 参数2:更新位置// 参数3:更新值this.$set(this.arr,0,1000)}}}
</script><style></style>

在截取前三个问题中,如何解决v-for更新,如下图: 

 

在点击改掉第一个元素的值中,如何解决v-for更新问题,如下: 

 

1. 哪些数组方法会导致v-for更新页面?

         可以改变原数组的方法

2. 有的数组方法不导致v-for更新页面, 如何处理?

        拿返回的新数组, 直接替换旧数组 this.$set()方法更新某个值  

2.v-for就地更新  

 目标:当数组改变后是如何更新的

旧-虚拟DOM结构:                                          新-虚拟DOM结构:

新旧DOM产生后对比, 然后决定是否复用真实DOM/更新内容

<template><div><ul><li v-for="(val, ind) in arr" :key="ind">{{ val }}</li></ul><button @click="btn">下标1位置插入新来的</button></div>
</template><script>export default {data(){return {arr: ["老大","老二","老三"]}},methods: {btn(){this.arr.splice(1,0,'新来的')}}}
</script><style></style>

 

 v-for更新时, 是如何操作DOM的?

             循环出新的虚拟DOM结构, 和旧的虚拟DOM

结构对比, 尝试复用标签就地更新内容

 3.真实DOM

目标:在document对象上, 渲染到浏览器上显示的标签 

 

虚拟DOM  

目标:本质是保存节点信息, 属性和内容的一个JS对象 ,真实DOM属性过多, 遍历耗时

 

目标:在内存中比较变化部分, 然后给真实DOM打补丁(更新)

 

  1. 内存中生成一样的虚拟DOM结构(==本质是个JS对象==)

    因为真实的DOM属性好几百个, 没办法快速的知道哪个属性改变了

    比如template里标签结构

    <template><div id="box"><p class="my_p">123</p></div>
    </template>

    对应的虚拟DOM结构

    const dom = {type: 'div',attributes: [{id: 'box'}],children: {type: 'p',attributes: [{class: 'my_p'}],text: '123'}
    }
  2. 以后vue数据更新

    • 生成新的虚拟DOM结构

    • 和旧的虚拟DOM结构对比

    • 利用diff算法, 找不不同, 只更新变化的部分(重绘/回流)到页面 - 也叫打补丁

==好处1: 提高了更新DOM的性能(不用把页面全删除重新渲染)==

==好处2: 虚拟DOM只包含必要的属性(没有真实DOM上百个属性)==

1. 虚拟DOM是什么?

本质就是一个JS对象, 保存DOM关键信息

2. 虚拟DOM好处?

      提高DOM更新的性能, 不频繁操作真实DOM,

      在内存中找到变化部分, 再更新真实DOM(打补丁)

3.diff算法  

目标:同级比较-根元素变化-整个dom树删除重建  

 

旧虚拟DOM

<div id="box"><p class="my_p">123</p>
</div>

新虚拟DOM

<ul id="box"><li class="my_p">123</li>
</ul>
情况2: 根元素没变, 属性改变, ==元素复用==, 更新属性

旧虚拟DOM

<div id="box"><p class="my_p">123</p>
</div>

新虚拟DOM

<div id="myBox" title="标题"><p class="my_p">123</p>
</div>

01、第一章webpack+vue基础/1-20 虚拟DOM+Diff算法

1. diff算法如何比较新旧虚拟DOM? 同级比较

2. 根元素变化? 删除重新建立整个DOM树

3. 根元素未变, 属性改变? DOM复用, 只更新属性

4.无key 

目标:从第二个往后更新内容 – 性能不高

 情况3: 根元素没变, 子元素没变, 元素内容改变
无key - 就地更新

v-for不会移动DOM, 而是尝试复用, 就地更新,如果需要v-for移动DOM, 你需要用特殊 attribute key 来提供一个排序提示

<ul id="myUL"><li v-for="str in arr">{{ str }} <input type="text"></li>
</ul>
<button @click="addFn">下标为1的位置新增一个</button>
export default {data(){return {arr: ["老大", "新来的", "老二", "老三"]}},methods: {addFn(){this.arr.splice(1, 0, '新来的')}}
};

 

目标:最大限度尝试就地修改/复用相同类型元素

 

有key, 值为索引  

目标:有key属性, 基于key的来比较新旧虚拟DOM, 移除key不存在元素

目标:先产生新旧虚拟DOM, 根据key比较, 还是就地更新  

 

有key, 值唯一不重复的字符串或数字

目标:有key属性, 基于key的来比较新旧虚拟DOM, 移除key不存在元素

  • 给每个数据换成对象, 准备id, 把id的值作为key  

 

有key, 值为id

目标:先产生新旧虚拟DOM, 根据key比较

 

1. 子元素或者内容改变会分diff哪2种情况比较?

无key, 就地更新

有key, 按照key比较

2. key值要求是?

唯一不重复的字符串或者数值

3. key应该怎么用?

有id用id, 无id用索引

4. key的好处? 可以配合虚拟DOM提高更新的性能

v-for什么时候会更新页面呢?

           数组采用更新方法, 才导致v-for更新页面

vue是如何提高更新性能的?

         采用虚拟DOM+diff算法提高更新性能

虚拟DOM是什么?

        本质是保存dom关键信息的JS对象
diff算法如何比较新旧虚拟DOM?

       根元素改变 – 删除当前DOM树重新建

       根元素未变, 属性改变 – 更新属性

       根元素未变, 子元素/内容改变

             无key – 就地更新 / 有key – 按key比较

 5.动态class

目标: 用v-bind给标签class设置动态的值

  • 语法 :class="{类名: 布尔值}"  

如何给标签class属性动态赋值?

       :class=“{类名: 布尔值}”, true使用, false不用

6.动态style  

目标: 给标签动态设置style的值

语法 :style="{css属性名: 值}"

 

给style赋值和class区别是?

             :class="{类名: 布尔值}”, true使用, false不用

             :style="{css属性名: 值}"  

7.案例-品牌管理(铺)  

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

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

相关文章

VIT论文阅读

论文地址&#xff1a;https://arxiv.org/pdf/2010.11929.pdf VIT论文阅读 摘要INTRODUCTION结论RELATEDWORKMETHOD1.VISIONTRANSFORMER(VIT)整体流程消融实验HEAD TYPE AND CLASSTOKENpoisitional embedding 整体过程公式Inductive biasHybrid Architecture 2.FINE-TUNINGANDH…

Substance 3D2024版 下载地址及安装教程

Substance 3D是Adobe公司推出的一套全面的3D设计和创作工具集合&#xff0c;用于创建高质量的3D资产、纹理和材质。 Substance 3D包括多个功能强大的软件和服务&#xff0c;如Substance 3D Painter、Substance 3D Designer和Substance 3D Sampler等。这些工具提供了广泛的功能…

TQ15EG开发板教程:在MPSOC上运行ADRV9009

首先需要在github上下载两个文件&#xff0c;本例程用到的文件以及最终文件我都会放在网盘里面&#xff0c; 地址放在最后面。在github搜索hdl选择第一个&#xff0c;如下图所示 GitHub网址&#xff1a;https://github.com/analogdevicesinc/hdl/releases 点击releases选择版…

vue实现海康h5player问题汇总

1. 引入问题 最开始写的时候&#xff0c;把h5player封装成了一个组件&#xff0c;把资源文件随便放在了一个目录下&#xff0c; 直接在子组件中引入&#xff0c;报错window.JSPlugin is not a constructor 或者JSPlugin is not defined 初步分析应该是引入资源文件失败&#x…

Java异常处理机制详解:多层方法调用与异常传播(day23)

1.数组下标越界 2.多个处理异常 上面这两个代码的区别就是有无 System.out.println("抛出了NumberFormatException"); System.out.println("抛出了ArrayIndexOutOfBoundsException"); 第一种是不论捕获到哪种异常&#xff0c;都只会调用e.printStack…

Asterisk 21.2.0编译安装经常遇到的问题和解决办法之pjproject

目录 Asterisk社区官方的说法然而买家秀是这样的pjproject-2.14下载不了的问题如何解决 Asterisk社区官方的说法 编译安装Asterisk 21.2.0版本 按照官网文档&#xff0c;原则上只需要如下几步&#xff1a; ./contrib/scripts/install_prereq install ./configure make make i…

Golang | Leetcode Golang题解之第20题有效的括号

题目&#xff1a; 题解&#xff1a; func isValid(s string) bool {n : len(s)if n % 2 1 {return false}pairs : map[byte]byte{): (,]: [,}: {,}stack : []byte{}for i : 0; i < n; i {if pairs[s[i]] > 0 {if len(stack) 0 || stack[len(stack)-1] ! pairs[s[i]] {…

【leetcode面试经典150题】36. 旋转图像(C++)

【leetcode面试经典150题】专栏系列将为准备暑期实习生以及秋招的同学们提高在面试时的经典面试算法题的思路和想法。本专栏将以一题多解和精简算法思路为主&#xff0c;题解使用C语言。&#xff08;若有使用其他语言的同学也可了解题解思路&#xff0c;本质上语法内容一致&…

第04章 计算机常用通信指标和术语视频课程

4.1 本章目标 掌握bit、Byte、KB、MB、GB、TB概念和换算关系掌握波特率、比特率、误码率的概念掌握信道、基带信号、频带信号概念了解多路复用、频分多路复用、时分多路复用了解同步传输、异步传输概念 4.2 bit、Byte、KB、MB、GB、TB概念和换算关系 4.2.1 概念与换算 4.2.2…

docker-compose 之 OpenGauss

使用 docker 启动高斯数据库的示范脚本如下&#xff1a; docker-compose.yml version: 3.7 services:opengauss:image: enmotech/opengauss:5.1.0container_name: opengaussnetwork_mode: "host"privileged: truevolumes:- ./opengauss:/var/lib/opengaussenvironm…

使用自己的数据基于SWIFT微调Qwen-Audio-Chat模型

目录 使用自己的数据训练参数设置自己的数据准备语音转写任务语音分类任务 开始训练不同训练方法mpddpmp ddpdeepspeed 训练实例训练详情Qwen-Audio-Chat模型 模型数据实例官方可用的数据由内部函数处理为指定格式 训练好的模型测试 使用自己的数据 官方参考文档&#xff1a;…

CSPNet: A New Backbone that can Enhance Learning Capability of CNN

CSPNet 摘要1.引言3.方法3.1Cross Stage Partial NetworkDenseNetCross Stage Partial DenseNetPartial Dense BlockPartial Transition LayerApply CSPNet to Other Architectures 3.2 Exact Fusion ModelLooking Exactly to predict perfectlyAggregate Feature PyramidBalan…

【Android】【root remount】【3】remount 文件详细信息获取

前言 我们在root & remount 设备后&#xff0c;push相关文件到systm 、vendor、product 等目录进行调试&#xff0c;那么我们push的文件被保存在什么地方呢&#xff1f; 以及我们FWS、app侧如何过去push 的文件信息呢&#xff1f; remount push 文件保存 push 文件保存的…

java数据结构与算法刷题-----LeetCode684. 冗余连接

java数据结构与算法刷题目录&#xff08;剑指Offer、LeetCode、ACM&#xff09;-----主目录-----持续更新(进不去说明我没写完)&#xff1a;https://blog.csdn.net/grd_java/article/details/123063846 文章目录 并查集 并查集 解题思路&#xff1a;时间复杂度O( n ∗ l o g 2…

高质量数据赋能大模型应用落地,景联文科技提供海量AI大模型数据

随着人工智能技术的迅猛进步&#xff0c;AI算法持续创新突破&#xff0c;模型的复杂度不断攀升&#xff0c;呈现出爆炸性的增长态势。数据的重要性愈发凸显&#xff0c;已然成为AI大模型竞争的核心要素。 Dimensional Research的全球调研报告显示&#xff0c;72%的受访者认为&a…

01、ArcGIS For JavaScript 4.29对3DTiles数据的支持

综述 Cesium从1.99版本开始支持I3S服务的加载&#xff0c;到目前位置&#xff0c;已经支持I3S的倾斜模型、3D Object模型以及属性查询的支持。Cesium1.115又对I3S标准的Building数据实现了加载支持。而ArcGIS之前一直没有跨越对3DTiles数据的支持&#xff0c;所以在一些开发过…

【Qt】:对话框(一)

对话框 一.基本的对话框二.自定义对话框三.通过图形化界面自定义对话框四.关于对话框mode 对话框是GUI程序中不可或缺的组成部分。一些不适合在主窗口实现的功能组件可以设置在对话框中。对话框通常是一个顶层窗口&#xff0c;出现在程序最上层&#xff0c;用于实现短期任务或者…

读所罗门的密码笔记16_直通心智

1. 直通心智 1.1. 如今&#xff0c;科学家已经可以诱发触觉、压觉、痛觉和大约250种其他感觉 1.1.1. DARPA支持的触觉技术第一次让一位受伤的人能够用假肢和手指感知到被触碰的物体 1.1.2. 可以建立人工系统&#xff0c;来替换和弥补受损大脑的部分区域 1.1.3. 神经科学家能…

如何合理利用Vue 3中的ref和reactive

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

最近一些前端面试问题整理

最近一些前端面试问题整理 4月8号1. TS 中的 类型别名 和接口的区别是什么&#xff1f;2. 什么是深拷贝和浅拷贝&#xff1f;深浅拷贝的方法有哪些&#xff1f;浅拷贝&#xff08;Shallow Copy&#xff09;深拷贝&#xff08;Deep Copy&#xff09;区别总结 3. 使用 JSON.strin…