Vue学习计划--Vue2(四)watch、class、style、set

Vue

  1. 监听(watch): 监听一个属性的变化

    1. 监事属性watch:

      1. 当监视的属性变化时,回调函数自动调用,进行相关操作
      2. 监视的属性必须存在,才能进入监视
      3. 监视的两种写法:
        1. new Vue 时传入watch配置
        2. 通过 vm.$watch()监视
      4. immediate初始化时让handler调用一下
    2. 深度监视:

      1. Vue中的watch默认不监视对象内部值的变化(只监视一层)
      2. 配置deep:true可以监视对象内部值变化(多层)

      备注:

      1. Vue自身可以监视对象内部值得变化,但Vue提供的watch默认不可以
      2. 使用watch时,根据数据的具体结构,决定是否采用深度监听
    3. 简写:当确定不使用immediate和deep属性时可以简写

    一、监听1. const vm = new Vue({el: "#app",watch:{immediate: true, // 初始化时让handler调用一下deep: true, // 深度监听handler(newValue, oldValue){console.log(newValue, oldValue)}}})2. vm.$watch('isSHow',{immediate: true, // 初始化时让handler调用一下deep: true, // 深度监听handler(newValue, oldValue){console.log(newValue, oldValue)}})
    二、简写1. const vm = new Vue({el: "#app",watch:{isShow(newValue, oldValue){console.log(newValue, oldValue)}}})2. vm.$watch('isSHow', function(newValue, oldValue){console.log(newValue, oldValue)})
    
  2. 计算属性(computed)、方法methods、监听(watch)的区别?
    computed、watch、methods专人干专事

    1. 计算属性computed:
      1. 目的是得到一个计算结果,必须要有return,一个状态值受多个状态值影响。
      2. 有缓存,当依赖状态值变化是,才会重新计算。
      3. 不能异步
      4. 本身不支持传参,可以使用闭包
    2. 事件methods:
      1. 绑定的事件处理,非必须return
      2. 没有缓存
    3. 监听watch:
      1. 一个状态的改变 影响多条数据,没有return
      2. 没有缓存
      3. 可以异步
      4. 不传参
  3. class和style绑定

    1. class样式 写法: :class = “xxx”, xxx可以是字符串、对象、数组
      1. 字符串写法适用于:类名不确定,要动态获取
      2. 对象写法适用于:要绑定多个样式,个数不确定,名字也不确定
      3. 数组写法适用于:要绑定多个样式,个数确定,名字也确定
    2. style样式
      :style = "{fontSize: xxx}" 其中xx是动态的
      :style = "[a, b]" 其中a, b是样式对象
      
      示例:
      <!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><script src="./vue.js"></script><style>/* #region */.red{color: red;}.blue{color: blue;}.green{color: green}.yellow{color: yellow}/* #endregion */.bold{font-weight: bold;}.size{font-size: larger;}</style></head><body><div id="app"><!-- 1. 绑定字符串 --><!-- 1.1.1 固定切换class名称 --><p :class="name">这是一个动态class</p><button @click="changClass">点击单次切换class名</button><br><!-- 1.1.2 随机切换class名称 --><!-- class 和:class 可以绑定多个class名称 --><p class="bold" :class="name">这是一个动态class</p><button @click="changClass2">点击数组切换class名</button><br><!-- 1.1.3 三元表达式表达式切换class名称 --><p :class="isName ? 'red' : 'blue'">这是一个动态class</p><button @click="isName = !isName">表达式切换class名</button><hr><!-- 2. 绑定对象 --><!-- <p :class="{bold: true, size: false}">这是一个对象绑定的class类名</p> --><p :class="objClass">这是一个对象绑定的class类名</p><button @click="objClassChange">表达式切换class名</button><hr><!-- 3. 绑定数组 --><!-- <p :class="['blue', 'bold', 'size']">这是一个对象绑定的class类名</p> --><p :class="arrClass">这是一个对象绑定的class类名</p><button @click="arrClassChange">表达式切换class名</button></div><script>const vm = new Vue({el: '#app',data: {name: 'red',isName: true,arr:['red', 'blue', 'green'],// 对象class名称objClass:{red: true,bold: true},// 数组class名称arrClass:[ 'blue', 'bold', 'size']},methods: {// #region 字符串绑定changClass(){this.name = 'blue'},changClass2(){const a = Math.floor(Math.random() * 3)console.log(this.arr[a]);this.name = this.arr[a]},// #endregionobjClassChange(){// this.objClass.size = true// 解决方法 $set方法// this.$set(this.objClass, 'size', true)Vue.set(this.objClass, 'size', true)},arrClassChange(){// this.arrClass.splice(0, 1, 'yellow')// 存在问题?为何vm中的arrClass值改变了,页面却没有渲染 => Vue内部监视原理// this.arrClass[0] = 'yellow'// 解决方法// this.$set(this.arrClass, 0, 'yellow')this.$set(this.arrClass, 0, 'yellow')}},})</script></body></html>
      
  4. set方法

    1. Vue会监视data中所有层次的数据。

    2. 如何监视对象的数据? 通过setter实现监视,且要在new Vue时就传入要监测的内容

      • 对象中后追加的属性,Vue默认不做响应式处理
      • 如需要给后添加的属性做响应式,使用如下API:
      Vue.set(target, propertyName/index, value)
      vm.$set(target, propertyName/index, value)
      
    3. 如何监视数组中的数据? 通过包裹数组更新元素的方法实现,本质就是做两件事

      1. 调用原生对应的方法对数组进行更新
      2. 重新解析模板,进而更新页面
    4. 在Vue修改数组中的某个元素一定要用如下方案:

      1. 使用这些API:push(), pop(), shift(), unshift(), sort(), reverse(), splice()
    5. Vue.set()或者vm.$set()

      特别注意:Vue.set()和vm.$set()不能给vm或者vm的根数据对象添加属性!!
      示例:

      <!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><script src="./vue.js"></script></head><body><div id="app">{{ obj }}<button @click="changeObj">点击改变obj值</button><hr>{{ arr }}<button @click="changeArr">点击改变arr值</button><hr>{{ arr2 }}<span v-once>{{ arr2 }}</span><button @click="changeArr2">点击改变arr顺序sort方法</button><hr>{{ arr3 }}<button @click="changeArr3">点击翻转arr</button></div><script>const vm = new Vue({el: '#app',data:{obj:{name: '小明'},arr:['小亮', 10],arr2:[ 10, 40, 5, 30],arr3:[ 1, 2, 3, 4]},methods: {changeObj(){// this.obj.banji = 'xx班级'// 解决方法// this.$set(this.obj, 'banji', 'xx班级')Vue.set(this.obj, 'banji', 'xx班级')},changeArr(){// this.arr[0] = '小白'// 解决方法一: set// this.$set(this.arr, 2, 'xx班级')// Vue.set(this.arr, 2, 'xx班级')// this.arr[2] = '小白'// 解决方法二:内置函数// 1. 数组后添加值// this.arr.push('小白')// 2. 数组后删除值// this.arr.pop()// 3. 从头往后删除数组// this.arr.shift()// 4. 数组前面加值// this.arr.unshift('小小')},// 数组排序changeArr2(){// 5. sort()// 正序this.arr2.sort((a,b) =>{console.log('--');console.log(a, b);return a-b})// this.arr2.sort((a,b) =>{//   return b - a// })},// 翻转数组changeArr3(){// this.arr3.reverse()// this.arr3.splice(1, 2, 'a', 'b', 'v')// 注意: 禁止给vm或者vm的跟数据对象添加属性// console.log(vm._data)// this.$set(vm._data, 'name', 'ssss')// this.$set(vm, 'name', 'ssss')}},})</script></body></html>
      

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

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

相关文章

SpectralGPT: Spectral Foundation Model 论文翻译3

遥感领域的通用大模型 2023.11.13在CVPR发表 原文地址&#xff1a;[2311.07113] SpectralGPT: Spectral Foundation Model (arxiv.org) E.消融研究 在预训练阶段&#xff0c;我们对可能影响下游任务表现的各种因素进行了全面研究。这些因素包括掩蔽比、ViT patch大小、数据规…

多线程--11--ConcurrentHashMap

ConcurrentHashMap与HashMap等的区别 HashMap线程不安全 我们知道HashMap是线程不安全的&#xff0c;在多线程环境下&#xff0c;使用Hashmap进行put操作会引起死循环&#xff0c;导致CPU利用率接近100%&#xff0c;所以在并发情况下不能使用HashMap。 ConcurrentHashMap 主…

Linux信息收集

Linux信息收集 本机基本信息 #管理员 $普通用户 之前表示登录的用户名称&#xff0c;之后表示主机名&#xff0c;再之后表示当前所在目录 / 表示根目录 ~表示当前用户家目录1、内核&#xff0c;操作系统和设备信息 uname -a 打印所有可用的系统信息 uname -r 内核版本 u…

01_阿里云_Xshell连接服务器

PC使用Xshell连接阿里云服务器 问题引出 之前使用Xshell连接阿里云服务器连接的好好的&#xff0c;今天准备上去服务器学习Linux发现连不上了&#xff0c;后来发现是防火墙的问题&#xff0c;还有阿里云的安全组也需要设置 解决方案 方法一&#xff1a;&#xff08;简单粗暴…

3D模型材质编辑

在线工具推荐&#xff1a; 三维数字孪生场景工具 - GLTF/GLB在线编辑器 - Three.js AI自动纹理化开发 - YOLO 虚幻合成数据生成器 - 3D模型在线转换 - 3D模型预览图生成服务 如今&#xff0c;3D 纹理、打印和建模都非常流行。使用可用的高级工具&#xff0c;创建 3D 模型…

基于Git的代码工程管理——学习记录一

一、Git简概[1] Git是一个分布式版本控制系统&#xff0c;它跟踪任何一组计算机文件的更改&#xff0c;通常用于在软件开发过程中协调协作开发源代码的程序员之间的工作。其为实现快速、数据完整性以及分布式非线性工作流程&#xff08;在不同计算机上运行数千个并行分支&#…

钉钉提交审批意见,并上传附件接口集成

一&#xff1a;适配器 DingtalkApprovalFilesExecute 参考方案链接&#xff1a;轻易云数据集成平台 二&#xff1a;请求接口。配置参数 接口文档&#xff1a;使用了新旧接口 服务端API发起带有附件的审批流并下载附件 - 钉钉开放平台 接口&#xff1a;topapi/processinsta…

搜索与回溯算法②

求0-9的数字可以组成的所有k 位数。 def backtrack(start, path, k, n, results):"""核心函数。:param start: 下一个添加的数字的起始位置:param path: 当前构建的路径&#xff0c;代表一个组合:param k: 组合中所需的数字个数:param n: 可选数字的最大值:par…

Python编程技巧:多层for循环的高级应用

更多资料获取 &#x1f4da; 个人网站&#xff1a;ipengtao.com Python的for循环结构是编程中最基础也是最常用的控制结构之一。通过for循环&#xff0c;可以轻松遍历数据集合和执行重复的操作。然而&#xff0c;当我们面对多层for循环时&#xff0c;性能和可读性可能会成为挑…

linux使用逻辑券lvm进行磁盘管理

lvm的安装 在线安装 yum install lvm2 离线安装&#xff0c;下载后执行 rpm -ivh * --nodeps --force 在如下网站中挨个下载http://mirrors.163.com/centos/7/os/x86_64/Packages/ device-mapper-1.02.170-6.el7_9.5.x86_64.rpm device-mapper-event-1.02.170-6.el…

A-B 数对

A-B 数对 题目背景 出题是一件痛苦的事情&#xff01; 相同的题目看多了也会有审美疲劳&#xff0c;于是我舍弃了大家所熟悉的 AB Problem&#xff0c;改用 A-B 了哈哈&#xff01; 题目描述 给出一串正整数数列以及一个正整数 C C C&#xff0c;要求计算出所有满足 A −…

Redis的三种消息队列实现方式

目录 前言 List实现消息队列 PubSub消息队列 Stream消息队列 三种实现方式对比 前言 为什么要使用Redis的消息队列&#xff1f; 成本低&#xff0c;对于RabbitMQ或是Kafka来说&#xff0c;已经是重量级的消息队列。 Redis的三种实现方式&#xff1a; List结构&#xff1…

形态学操作—形态学梯度

形态学梯度&#xff08;Morphological Gradient&#xff09;是图像形态学处理中的一种操作&#xff0c;它通过对图像的膨胀和腐蚀操作之间的差异来突出图像中的边缘信息。这种操作有助于增强图像中物体的边界&#xff0c;使它们更加突出。   在数学上&#xff0c;形态学梯度的…

【安卓12源码】WMS系列:addWindow 和 removeWindow流程

一、Window 的属性 Window的属性定义在WindowManager的内部类LayoutParams中&#xff0c;了解Window的属性能够更好的理解WMS的内部原理。Window的属性有很多种&#xff0c;与应用开发最密切的有三种&#xff0c;它们分别是Type(Window的类型)、Flag(Window的标志)和SoftInputM…

SMART PLC温度采集模块温度转换FC(梯形图+SCL代码)

对于模拟量输入采集,温度变送器等我们可以利用线性转换功能块完成温度采集,西门子PLC有温度采集模块,利用温度采集模块采集温度我们的转换关系无需进行线性变换,下面我们具体介绍。温度采集线性转换功能块请参考下面的文章链接: https://rxxw-control.blog.csdn.net/arti…

Hadoop学习笔记(HDP)-Part.06 安装OracleJDK

目录 Part.01 关于HDP Part.02 核心组件原理 Part.03 资源规划 Part.04 基础环境配置 Part.05 Yum源配置 Part.06 安装OracleJDK Part.07 安装MySQL Part.08 部署Ambari集群 Part.09 安装OpenLDAP Part.10 创建集群 Part.11 安装Kerberos Part.12 安装HDFS Part.13 安装Ranger …

代码随想录二刷 | 栈与队列 |用栈实现队列

代码随想录二刷 &#xff5c; 栈与队列 &#xff5c;用栈实现队列 题目描述解题思路 & 代码实现 题目描述 232.用栈实现队列 请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作&#xff08;push、pop、peek、empty&#xff09;&#xff1a; 实现 M…

外包干了8个月,技术退步明显.......

先说一下自己的情况&#xff0c;大专生&#xff0c;18年通过校招进入武汉某软件公司&#xff0c;干了接近4年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落! 而我已经在一个企业干了四年的功能测…

undo log 具体怎么回滚事务,如何查询慢 SQL 产生的原因

文章目录 undo log 具体怎么回滚事务 &#xff1f;如何查询慢 SQL 产生的原因 简单来看两个问题&#xff1a; undo log 具体怎么回滚事务 &#xff1f; 举个例子&#xff1a; 对于 insert 类型的 sql&#xff0c;会在 undo log 中记录下方才你 insert 进来的数据的 ID&#x…

HarmonyOS带大家创建自己的第一个Page页面并实现路由跳转

我们 在开发过程中 经常会看到 被 艾特修饰的代码 有限像 java中的注解 在 harmonyOS 中 这叫 装饰器 被关键字装饰取来的代码 会具备某某功能 我们这里先来创建一个新的界面 在pages 目录下 右键 如下图 选择page创建 这里 我们取名叫 AppView 然后点击右下角 Finish 这样…