Vue——常用指令总结、指令修饰符、v-model原理、computed计算属性、watch监听器、ref和$refs

文章目录

    • 一、概念理解
    • 二、指令
      • 1. 常用内置指令总结
      • 2. 常用指令修饰符
      • 3. 自定义指令
      • 4. v-model
        • 原理
        • 表单类组件封装
    • 三、补充
      • 1. computed计算属性
      • 2. watch监视器
      • 3. ref和$refs

一、概念理解

事件处理函数

  • 事件处理函数应该写到一个跟data同级的配置项(methods)中

  • methods中的函数内部的this都指向Vue实例

  • 如果不传递任何参数,则方法无需加小括号;methods方法中可以直接使用 e 当做事件对象

  • 如果传递了参数,则实参 $event 表示事件对象,固定用法。

Vue生命周期

Vue生命周期:一个Vue实例从创建 到 销毁 的整个过程。

生命周期四个阶段:

1.创建阶段:创建响应式数据

2.挂载阶段:渲染模板

3.更新阶段:修改数据,更新视图

4.销毁阶段:销毁Vue实例

Vue生命周期过程中,会自动运行一些函数,被称为生命周期钩子→ 让开发者可以在特定阶段运行自己的代码

脚手架Vue CLI:Vue官方提供的一个全局命令工具,帮助我们快速创建一个开发Vue项目的标准化基础架子。(集成了webpack配置)

异步更新

Vue 是异步更新DOM (为了提升性能),比如实现一个需求:

点击按钮—>编辑框自动聚焦

  1. 点击编辑按钮,显示编辑框
  2. 让编辑框立刻获取焦点

编辑框显示后,立刻获取焦点是不能成功的!

解决方法:

$nextTick:等 DOM更新后,才会触发执行此方法里的函数体

语法: this.$nextTick(函数体)

this.$nextTick(() => {this.$refs.inp.focus()
})

注意:$nextTick 内的函数体 一定是箭头函数,这样才能让函数内部的this指向Vue实例

使用setTimeout其实也能实现,但是自定义的等待时间不准确,随着程序体量的变化,我们不知道多长事件DOM更新结束

二、指令

1. 常用内置指令总结

指令(Directives)是 Vue 提供的带有 v- 前缀 的 特殊 标签属性

指令示例描述
内容渲染指令
v-text<p v-text="uname">hello</p>类似 innerText, uame 值渲染到 p 标签中,会覆盖 p 标签原有内容
v-html<p v-html="intro">hello</p>将 intro 值渲染到 p 标签中,会覆盖 p 标签原有内容,能将HTML标签的样式呈现出来
条件渲染指令
v-showv-show = "表达式"达式值为 true 显示, false 隐藏,频繁切换显示隐藏的场景
v-ifv-if= "表达式" 条件渲染,表达式值 true显示, false 隐藏,创建 或 移除元素节点,适用于不频繁切换的场景
v-elsev-else-ifv-else v-else-if="表达式"辅助v-if进行判断渲染,需要紧接着v-if使用
事件绑定指令
v-on<button v-on:事件名="内联语句">按钮</button><button v-on:事件名="处理函数(实参)">按钮</button>为DOM注册事件,简写为 @
属性绑定指令
v-bindv-bind:属性名=“表达式”动态设置html的标签属性 比如:src、url、title,可以简写成 :
列表渲染指令
v-for v-for (item, index) in arr :key="唯一值"(字符串或数字类型)基于一个数组或对象或数字来循环渲染一个列表结构,item 是数组中的每一项,index 是每一项的索引,不需要可以省略,arr 是被遍历的数组,key给列表项添加的唯一标识
双向绑定指令
v-modelv-model="变量"表单元素(input、radio、select)使用,双向绑定数据,可以快速 获取设置 表单元素内容

2. 常用指令修饰符

指令示例描述
@keyup.enter<input @keyup.enter>监听键盘enter事件
v-model.trimv-model.trim去除首位空格
v-model.numberv-model.number转数字
@事件名.stop<div @click.stop="fatherFn" class="father">阻止事件冒泡
@事件名.prevent<div @click.prevent="fatherFn" class="father">阻止默认行为
@事件名.stop.prevent可以连用 即阻止事件冒泡也阻止默认行为 (比如点击链接但是不跳转到页面)
v-bind对样式控制的增强
:class='对象/数组'对象语法:<div class="box" :class="{ 类名1: 布尔值, 类名2: 布尔值 }"></div> 数组语法: <div class="box" :class="[ 类名1, 类名2, 类名3 ]"></div>针对 class 类名style 行内样式 进行控制 ,如果值是true,就有这个类,否则没有这个类
:disabled=布尔值:disabled=布尔值接收布尔值,如果为true禁用标签
:style={}<div class="box" :style="{ CSS属性名1: 新CSS属性值, CSS属性名2: 新CSS属性值 }"></div>属性名不支持带横杠,如果有横杠需要用引号包裹

3. 自定义指令

自己定义的指令,可以封装一些DOM操作,扩展额外的功能

inserted:被绑定元素插入父节点时调用的钩子函数

el:使用指令的那个DOM元素

  • 全局注册

    //在main.js中
    Vue.directive('指令名', {"inserted" (el) {// 可以对 el 标签,扩展额外功能el.focus()}
    })// 在xxx.vue中
    <input type="text"  v-focus/>  
    
  • 局部注册

    //在Vue组件的配置项中
    directives: {"指令名": {inserted (el) {// 可以对 el 标签,扩展额外功能el.focus()}}
    }
    
  • 使用指令

    注意:在使用指令的时候,一定要先注册再使用,否则会报错

    注册指令时不用v-前缀,但使用时加v-前缀

  • 指令的值

​ 在绑定指令时,可以通过“=”的形式为指令 绑定 具体的参数值

<div v-color="color">我是内容</div>

通过 binding.value 可以拿到指令值,指令值修改会 触发 update 函数

directives: {color: {inserted (el, binding) {el.style.color = binding.value},update (el, binding) {el.style.color = binding.value}}
}

4. v-model

特别重点理解v-model指令

常见的表单元素都可以用它来绑定,用于快速获取或设置表单元素的值,它会根据控件类型字段选取正确的方法来更新元素。

输入框  input:text   ——> value
文本域  textarea	 ——> value
复选框  input:checkbox  ——> checked
单选框  input:radio   ——> checked
下拉菜单 select    ——> value
...
原理

v-model本质上是一个语法糖。例如应用在输入框上,是绑定value属性 和 input事件 的合写。

不同的表单元素, v-model在底层的处理机制是不一样的。比如给checkbox使用v-model底层处理的是 checked属性和change事件。

提供数据的双向绑定,$event 用于在模板中,获取事件的形参

  • 数据变–>视图变 :value
  • 视图变–>数据变 @input
<template><div id="app" ><input v-model="msg" type="text">
// 等价于<input :value="msg" @input="msg = $event.target.value" type="text"></div>
</template>
表单类组件封装
  • 未封装时,表单组件父子间通信通过双向数据绑定、事件监听实现
// App.vue
<template><div class="app"><!-- $event获取事件的形参 --><BaseSelect:cityId="selectId" @changeId="selectId=$event"></BaseSelect></div>
</template><script>
import BaseSelect from './components/BaseSelect.vue'
export default {data() {return {selectId: '101',}},components: {BaseSelect,},
}
</script><style>
</style>
// BaseSelect.vue
<template><div><select :value="cityId" @change="handleChange"><option value="101">北京</option><option value="102">上海</option><option value="103">广州</option><option value="104">深圳</option></select></div></template><script>export default {props: {cityId: String},methods: {handleChange (e) {// console.log(e.target.value)this.$emit('changeId', e.target.value)}}}</script><style></style>
  • v-model封装时,v-model其实是 :value和@input事件的简写

子组件:props通过value接收数据,事件触发 input

父组件:v-model直接绑定数据

// 子组件
<select :value="value" @change="handleChange">...</select>
props: {value: String
},
methods: {handleChange (e) {this.$emit('input', e.target.value)}
}// 父组件
<BaseSelect v-model="selectId"></BaseSelect>
  • .sync修饰符,本质就是 :属性名@update:属性名 合写

可以实现 子组件父组件数据双向绑定,作用和v-model类似,用于简化代码

// 父组件
//.sync写法
<BaseDialog :visible.sync="isShow" />
//--------------------------------------
//完整写法
<BaseDialog :visible="isShow" @update:visible="isShow = $event" 
/>// 子组件
props: {visible: Boolean
},this.$emit('update:visible', false)

三、补充

1. computed计算属性

  1. 声明在 computed 配置项中,该配置项和data配置项是同级的,一个计算属性对应一个函数
  2. 使用起来和普通属性一样使用 {{ 计算属性名}}
  3. computed中计算属性内部的this依然指向的是Vue实例

**默认写法:**只能读取不能修改

<p>计算:{{ 计算属性名 }}</p>computed: {计算属性名 () {计算逻辑return 结果}
},

**完整写法:**能读取能修改

// 被获取求值时,执行get(有缓存,优先读缓存)
// 会将返回值作为求值的结果
// 被修改赋值时,执行set。修改的值传递给set方法的形参
computed: {计算属性名: {get () {计算逻辑return 结果},set (修改的值) {修改逻辑}}
}

与methods配置项的区别

  1. computed具有缓存特性提升性能

    计算属性会对计算出来的结果缓存,再次使用直接读取缓存,

    依赖项变化了,会自动重新计算 → 并再次缓存

  2. methods没有缓存特性

  3. 当一个结果依赖其他多个值时,最好使用计算属性;当处理业务逻辑时,最好使用methods方法,比如事件的处理函数

2. watch监视器

  1. 监视数据变化,执行一些业务逻辑或异步操作

  2. watch声明在跟data同级的配置项中

    注意,方法名不允许出现一些字符,比如-、.等,如果出现,需要用单引号包裹

简单写法: 简单类型数据直接监视

data: { words: '苹果',obj: {words: '苹果'}
},watch: {// 直接级别words (newValue, oldValue) {一些业务逻辑 或 异步操作。 },// 对象内的子属性  'obj.words' (newValue, oldValue) {一些业务逻辑 或 异步操作。 }
}

完整写法: 添加额外配置项

data: {obj: {words: '苹果',lang: 'italy'},
},watch: {// watch 完整写法对象: {deep: true, // 深度监视immdiate:true,//立即执行handler函数handler (newValue) {value发生改变后执行逻辑}}
}

3. ref和$refs

利用ref 和 $refs 可以用于 获取 dom 元素 或 组件实例,规定查找范围 使查找组件更精确

1.给要获取的盒子添加ref属性

<div ref="chartRef">我是渲染图表的容器</div>

2.获取时通过 $refs获取 this.$refs.chartRef 获取

mounted () {console.log(this.$refs.chartRef)
}

注意:

用document.querySelect(‘.box’) 获取的是整个页面中的类名为box的标签。

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

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

相关文章

求职笔试题

PDD 最长公共子序列 1143-最长公共子序列 class Solution:def longestCommonSubsequence(self, text1: str, text2: str) -> int:"""二维动态规划"""m, n len(text1), len(text2)# dp [[0]* (n1)] * (m1) 这种写法错误&#xff0c;m1行…

【Ragflow】6. Ragflow-plus重磅更新:增加用户后台管理系统

概述 Ragflow本身并不包含用户管理的功能&#xff0c;我在系列前文中&#xff0c;写过一个脚本&#xff0c;用来批量插入用户&#xff0c;并自动加入团队&#xff0c;配置默认模型设置。然而&#xff0c;此方式需要用户安装对应环境&#xff0c;对普通用户并不友好。 因此我开…

什么是贴源库

贴源库的定义与核心概念 贴源库&#xff08;Operational Data Store, ODS&#xff09;是数据架构中的基础层&#xff0c;通常作为数据仓库或数据中台的第一层&#xff0c;负责从业务系统直接抽取、存储原始数据&#xff0c;并保持与源系统的高度一致性。其核心在于“贴近源头”…

MSTP+VRRP三层架构综合实验

一、实验目的 掌握VLAN、VRRP、STP和Eth-Trunk的基本配置方法。 实现内网与外网的通信&#xff0c;并确保网络的高可用性和冗余性。 理解DHCP、OSPF和NAT在网络中的应用。 二、实验环境 网络拓扑&#xff1a;如图所示&#xff0c;包含两台三层交换机&#xff08;SW1、SW2&a…

未来村庄智慧灯杆:点亮乡村智慧生活​

在乡村振兴与数字乡村建设的时代进程中&#xff0c;未来村庄智慧灯杆凭借其多功能集成与智能化特性&#xff0c;已成为乡村基础设施建设领域的崭新焦点&#xff0c;为乡村生活带来了前所未有的便利&#xff0c;推动着乡村生活模式的深刻变革。​ 多功能集成&#xff1a;一杆多能…

RedHatLinux(2025.3.22)

1、创建/www目录&#xff0c;在/www目录下新建name和https目录&#xff0c;在name和https目录下分别创建一个index.htm1文件&#xff0c;name下面的index.html 文件中包含当前主机的主机名&#xff0c;https目录下的index.htm1文件中包含当前主机的ip地址。 &#xff08;1&…

第十五章:Python的Pandas库详解及常见用法

在数据分析领域&#xff0c;Python的Pandas库是一个不可或缺的工具。它提供了高效的数据结构和数据分析工具&#xff0c;使得数据处理变得简单而直观。本文将详细介绍Pandas库的基本功能、常见用法&#xff0c;并通过示例代码演示如何使用Pandas进行数据处理。最后&#xff0c;…

算法为舟 思想为楫:AI时代,创作何为?

在科技浪潮汹涌澎湃的当下,AI技术以前所未有的态势席卷各个领域,创作领域亦未能幸免。当生成式AI展现出在剧本撰写、诗歌创作、图像设计等方面的惊人能力时,人类创作者仿佛置身于文明演化的十字路口,迷茫与困惑交织,兴奋与担忧并存。在AI时代,创作究竟该何去何从?这不仅…

[Raspberry Pi]如何將看門狗(WatchDog)服務建置在樹莓派的Ubuntu作業系統中?

看門狗(WatchDog)服務常應用於連網的嵌入式邊緣設備等IOT裝置和實體伺服器&#xff0c;主要是若這些連網裝置分散在各個應用環境中執行對應任務&#xff0c;例如感測物理數據&#xff0c;監控影像數據或執行各式Docker服務&#xff0c;當連網裝置因故異常&#xff0c;同時又處於…

Linux进程状态补充(10)

文章目录 前言一、阻塞二、挂起三、运行R四、休眠D五、四个重要概念总结 前言 上篇内容大家看的云里雾里&#xff0c;这实在是正常不过&#xff0c;因为例如 写实拷贝 等一些概念的深层原理我还没有讲解&#xff0c;大家不用紧张&#xff0c;我们继续往下学习就行&#xff01;&…

RPCGC阅读

24年的MM 创新 现有点云压缩工作主要集中在保真度优化上。 而在实际应用中&#xff0c;压缩的目的是促进机器分析。例如&#xff0c;在自动驾驶中&#xff0c;有损压缩会显着丢失户外场景的详细信息。在三维重建中&#xff0c;压缩过程也会导致场景数据中语义信息(Contour)的…

keil中文注释出现乱码怎么解决

keil中文注释出现乱码怎么解决 在keil–edit–configuration中encoding改为chinese-GB2312

Linux的进程优先级调度学习笔记

Linux的进程优先级数值范围 范围 -20 到 19&#xff0c;数值越大优先级越低 示例代码 下面是一个简单的 C 语言示例&#xff0c;它演示了如何在 Linux 下修改进程的优先级并观察调度影响。 #include <stdio.h> #include <stdlib.h> #include <unistd.h> …

YOLOv8+ Deepsort+Pyqt5车速检测系统

该系统通过YOLOv8进行高效的目标检测与分割&#xff0c;结合DeepSORT算法完成目标的实时跟踪&#xff0c;并利用GPU加速技术提升处理速度。系统支持模块化设计&#xff0c;可导入其他权重文件以适应不同场景需求&#xff0c;同时提供自定义配置选项&#xff0c;如显示标签和保存…

权限提升—Windows权限提升进程注入令牌窃取服务启动

前言 依旧是提权的内容啦&#xff0c;上次讲的是利用漏洞来进行提权&#xff0c;今天我们主要讲的是利用Windows中的服务、进程等东西进行权限提升。 服务启动 首先要知道一点&#xff0c;就是windows中服务是以system权限运行的&#xff0c;假如我们创建一个运行后门的服务…

数据结构与算法——顺序表之手撕OJ题

文章目录 一、前言二、拿捏OJ题2.1移除元素2.2删除有序数组中的重复项2.3合并两个有序数组 三、总结 一、前言 Do you study today?up在上一次已经讲解完毕了有关顺序表的所有知识&#xff0c;不知道大家是否已经沉淀完毕了呢&#xff1f;有一句老话说得好啊——光看不练假把…

如何在 AI 搜索引擎(GEO)霸屏曝光,快速提升知名度?

虽然大多数人仍然使用 Google 来寻找答案&#xff0c;但正在发生快速转变。ChatGPT、Copilot、Perplexity 和 DeepSeek 等 LLM 已成为主流。这主要是因为每个都有自己的免费和公共版本&#xff0c;并且总是有重大的质量改进。 许多人每天都使用这些工具来提问和搜索互联网&…

4.训练篇2-毕设篇

resnet # 1. 从 torchvision 中加载预训练的 ResNet18 模型 # pretrainedTrue 表示使用在 ImageNet 上预训练过的参数&#xff0c;学习效果更好 base_model_resnet18 models.resnet18(pretrainedTrue)# 2. 获取 ResNet18 模型中全连接层&#xff08;fc&#xff09;的输入特征…

电磁兼容EMC概述

最近重新学了下电磁兼容&#xff0c;对这个东西更清晰了一些&#xff0c;就重新写了一篇&#xff0c;有不足的地方欢迎的大家在评论区里和我交流。 电磁兼容 电磁兼容指的是什么呢&#xff1f;指的是设备在其电磁环境中性能不受降级地正常运行并不对其他设备造成无法承受的电…

坚持“大客户战略”,昂瑞微深耕全球射频市场

北京昂瑞微电子技术股份有限公司&#xff08;简称“昂瑞微”&#xff09;是一家聚焦射频与模拟芯片设计的高新技术企业。随着5G时代的全面到来&#xff0c;智能手机、智能汽车等终端设备对射频前端器件在通信频率、多频段支持、信道带宽及载波聚合等方面提出了更高需求&#xf…