首页 > 其他分享 >Vue指令学习

Vue指令学习

时间:2023-05-02 16:45:14浏览次数:40  
标签:Vue 自定义 渲染 元素 绑定 学习 指令 组件

1.指令的定义

指令 (Directives) 是带有 v- 前缀的特殊 attribute。指令的职责是,当表达式的值改变时,将其产生的连带影响,响应式地作用于 DOM。

指令还有一些基本的要了解的就是指令的修饰符(.native,.stop,.prevent等),动态参数(<a @[event]="doSomething">),缩写(: , @等)。这些都是比较常用的就不一一赘述了。

2.指令枚举

v-text:和插值表达式效果一样,用于解析变量的值。

v-html:插入一段html。

v-show:根据元素的真假值,切换元素的css中display属性,元素始终会被渲染并保留在 DOM 中,所以不管初始条件是什么,元素总是会被渲染。

v-if:有条件的渲染元素,当值为false的时候组件会被销毁,v-if 也是惰性的,如果在初始渲染时条件为假,则什么也不做,直到条件第一次为真时,才会开始渲染条件块。

     实际使用时候:v-if有更高的切换开销,而 v-show有更高的初始渲染开销。因此,如果需要非常频繁的切换,则使用 v-show 较好,如果在运行时条件很少改变,则使用 v-if 较好。当然特殊场景下,你需要彻底销毁一个组件的时候,就肯定使用v-if更好,还要兼顾到对于内存的开销,在占内存比较大的组件用v-if更好。

v-else:这个指令后面不需要表达式或者变量,而且前一兄弟元素必须有 v-if 或 v-else-if否则它将不会被识别

v-else-if:前一兄弟元素必须有 v-if 或 v-else-if,功能等于else-if

v-for:基于源数据多次渲染元素或模板块。

  (1)为了给 Vue 一个提示,以便它能跟踪每个节点的身份,从而重用和重新排序现有元素,你需要为每项提供一个唯一的key,建议尽可能在使用v-for的地方加上key。

  (2)在template上使用v-for,当你需要循环渲染一段包含多个元素的内容。

                    

 (3)永远不要把v-if和v-for在同一个元素上使用这是因为v-for的优先级会高于v-if,因此v-if会重复运行在每个v-for中,如果有需要同时使用的场景,可以将其中一个移动至template中:

例如在我们获取测试记录执行的结果表格中,结果那一列需要有不同的行为,其他列有共同的行为,因此需要单独把它拿出来。

                   

v-on:绑定事件监听器,用在普通元素上时,只能监听原生 DOM 事件。用在自定义元素组件上时,也可以监听子组件触发的自定义事件。

v-bind:动态绑定一个属性,单向的,虽然是单向的,但是考虑到js内存管理,有些情况值是会被子组件而修改的。

v-model:在表单控件或者组件上创建双向绑定,双向绑定就是数据变化后更新视图视图变化后更新数据。

    数据层(Model):应用的数据及业务逻辑

    视图层(View):应用的展示效果

v-slot:用于插槽中,例如---<template v-slot:header>

v-pre:跳过这个元素和它的子元素的编译过程。可以用来显示原始 Mustache 标签。跳过大量没有指令的节点会加快编译。

v-cloak:和编译有关,基本上用不到。

v-once:只渲染元素和组件一次。随后的重新渲染,元素/组件及其所有的子节点将被视为静态内容并跳过。这可以用于优化更新性能。

3.自定义指令

有的情况下,已有的指令不能满足你的要求,但是你仍然需要对普通 DOM 元素进行底层操作,这时候就会用到自定义指令。

格式:Vue.directive( ' 自定义指令名 ' , { } )

参数一是指令的名字,注意定义的时候指令前不需要加 v- 前缀,但调用的时候必须加上这个前缀。

参数二是一个对象,在这对象身上有一些指令相关的函数,这些函数可以在特定阶段执行相关的操作,叫钩子函数。

Vue项目中自定义指令的具体步骤可参考:https://blog.csdn.net/weixin_41655541/article/details/103871361

在我们的代码中举例就是:滚动加载v-loadmore指令。

一个指令定义对象可以提供如下几个钩子函数(钩子函数说白了也就是生命周期,即当一个指令绑定到一个元素上时,这个指令内部有5个生命周期事件函数。)

  • bind():当指令绑定在 HTML 元素上时触发

  • inserted():当指令绑定的元素插入到父节点中的时候触发

  • update():当指令绑定的元素状态/样式、内容(这里指元素绑定的 vue 数据) 发生改变时触发

  • componentUpdated():当 update() 执行完毕之后触发

  • unbind():当指令绑定的元素从 dom 中删除时触发

 

指令钩子函数会被传入以下参数:

el:指令所绑定的元素,可以用来直接操作 DOM。

binding:一个对象,包含以下 property:

  1. name:指令名,不包括 v- 前缀。
  2. value:指令的绑定值,例如:v-my-directive="1 + 1" 中,绑定值为 2。=》 赋值给自定义指令的回调函数
  3. oldValue:指令绑定的前一个值,仅在 update 和 componentUpdated 钩子中可用。无论值是否改变都可用。
  4. expression:字符串形式的指令表达式。例如 v-my-directive="1 + 1" 中,表达式为 "1 + 1"
  5. arg:传给指令的参数,可选。例如 v-my-directive:foo 中,参数为 "foo"
  6. modifiers:一个包含修饰符的对象。例如:v-my-directive.foo.bar 中,修饰符对象为 { foo: true, bar: true }

 

vnode:Vue 编译生成的虚拟节点。

oldVnode:上一个虚拟节点,仅在 update 和 componentUpdated 钩子中可用。 

标签:Vue,自定义,渲染,元素,绑定,学习,指令,组件
From: https://www.cnblogs.com/131362wsc/p/17367870.html

相关文章

  • 《重构:改善既有代码的设计》学习笔记
    代码的坏味道名称说明重构手法神秘命名MysteriousName好的命名能够节省时间改变函数神秘、变量改名、字段改名重复代码DuplicatedName重复代码让人不得不留意其中的细微差异提炼函数、移动语句、函数上移过长函数LongFunction函数越长,就越难理解提炼函......
  • 迁移学习(VMT)《Virtual Mixup Training for Unsupervised Domain Adaptation》
    论文信息论文标题:VirtualMixupTrainingforUnsupervisedDomainAdaptation论文作者:TakeruMiyato,S.Maeda,MasanoriKoyama,S.Ishii论文来源:2019CVPR论文地址:download 论文代码:download视屏讲解:click   ......
  • 点分治学习笔记
    点分治序列上的操作可以用很多方式维护,线段树树状数组平衡树啥的,但是如果毒瘤出题人把序列搬到了树上,则需要一些奇妙方法。一般有两种(好几种?)方法:树链剖分,把树上路径转化成dfn序上的多段进行操作。LCT,不多说,目前只会板子,没搞太懂。点分治,这个是不用把树转化成序列的,而是将树......
  • 用vue2封装轮播图组件
    日常练习用vue2封装轮播图组件,传入图片信息数组。实现思想:图片组添加translate动画,通过轮播到第几张图片作为参数,让图片组整体移动。Carousel.vue<template><divclass="carousel"><divclass="carouselList"><!--图片列表--><ulclass="img&quo......
  • ChatGPT搭建Express与Vue3网页版带后台
    技术架构golang+node16+vite+vue3+expresscnetos7以上+宝塔面板文字搭建教程把service目录上传到宝塔www/wwwroot目录下面,放通3000端口,新建一个数据库,导入数据库,修改.env里的配置进入到service目录,执行nohup./linux.bin&测试后端api有没有正常启动,执行curlhttp:/......
  • Qt 学习笔记
     1.  *newClass 与引用<qpushbutton.cpp>:QPushButton::QPushButton(QWidget*parent):QAbstractButton(*newQPushButtonPrivate,parent){Q_D(QPushButton);d->init();}<qabstractbutton.cpp>:/*!\internal*/对应的函数原型......
  • 安卓逆向系列教程(一)Dalvik 指令集
    安卓逆向系列教程(一)Dalvik指令集作者:飞龙寄存器Dalvik指令集完全基于寄存器,也就是说,没有栈。所有寄存器都是32位,无类型的。也就是说,虽然编译器会为每个局部变量分配一个寄存器,但是理论上一个寄存器中可以存放一个int,之后存放一个String(的引用),之后再存放一个别的东西。如果要处......
  • vue学习 第七天 清除浮动 (clear:xxx)
    清除浮动 问题一、父元素不方便设置高度,子元素设置浮动(不占位置),父元素的高度会默认为0,就会影响下面的标准流的盒子。总结:子盒子浮动,父盒子失去高度,影响了整体布局1、清除浮动的原因由于浮动元素不再占用原文档流的......
  • vue学习 第六天 浮动 (float) 和 页面传统布局(标准流、浮动、定位)。
    浮动(float)1、传统网页布局的三种方式(3种)网页布局的本质---用CSS来摆放盒子。把盒子摆放到相应位置。CSS提供了三种传统布局方式(盒子如何进行排列顺序):普通流(标准流)、浮动、定位2、标准流(普通流/文档流)就是标签按照规定好默认方式排......
  • 联邦学习基础
    作者:程勇链接:https://zhuanlan.zhihu.com/p/87858287来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。联邦学习(FederatedLearning,a.k.a.FederatedMachineLearning)可以分为三类:横向联邦学习(HorizontalFederatedLearning),纵向联邦学习(Vertical......