前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >vue.js笔记——指令

vue.js笔记——指令

作者头像
IMWeb前端团队
发布于 2017-12-29 08:31:37
发布于 2017-12-29 08:31:37
1.2K00
代码可运行
举报
文章被收录于专栏:IMWeb前端团队IMWeb前端团队
运行总次数:0
代码可运行

vue.js笔记——指令

跟ng的指令系统类似,vue也拥有一套指令系统。

所谓指令,其实本质就是在模板中出现的特殊标记,根据这些标记让框架知道需要对这里的 DOM 元素进行什么操作。

简单示例

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<p v-text="msg"></p>

这里v是vue的前缀(如果是Q.js就是q前缀= =),text是指令ID,msg是expression。msg作为viewModel,当它的值发生改变时,就触发指令text,重新计算标签的textContent(innerText)。

这里expression可以使用内联方式,在任何依赖的属性变化时都会触发指令更新。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<p v-text="'hello ' + user.name + ', ' + time"></p>

内联表达式中只能访问当前上下文的vue实例的属性和方法 内联表达式只能是单一语句

对于某些指令需要在表达式之前添加参数,比如事件绑定:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<span v-on="click:openComment"></span>

使用逗号分割绑定多重指令

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<div v-on="click:onClick, keyup:onKeyup, keydown:onKeydown"></div>

字面量指令不会创建数据绑定,它的值只是一个字符串字面量

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<player v-ref="StringId"></player>

自定义指令

类似ng,vue也允许注册自定义指令。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Vue.directive(id, definition)

两个参数分别是指令 ID 与定义对象。其中定义对象可以定义几个可选钩子函数,如下:

钩子函数

描述

bind

构造函数,第一次绑定时调用

update

bind之后以初始值调用一次,之后每当绑定值变化时调用

unbind

析构函数,解绑时调用

eg:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Vue.directive('my-directive', {
    bind: function () {
        ...
    },
    update: function (newValue, oldValue) {
        ...
    },
    unbind: function () {
        ...
    }
})

很多情况下我们只需要定义update,直接传入一个函数即可。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Vue.directive('my-directive', function (value) {
    ...
})

绑定指令的实例拥有以下属性:

属性

描述

el

绑定指令的DOM元素

vm

上下文ViewModel

expression

指令表达式

arg

参数

name

指令ID

modifiers

指令的修饰符

descriptor

指令的解析结果

eg:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<div id="chat" v-chat="msg">world</div>
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Vue.directive('chat', function (value) {
    console.log(this.el); //world
    console.log(this.arg);          //hello
    console.log(this.name);         //chat
    console.log(this.expression);   //msg
});

var chat = new Vue({
    el: '#chat',
    data: {
        msg: 'hello'
    }
});

多个指令值可以传入对象字面量

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<div id="chat" v-chat="{flower: true, image: false}">world</div>
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Vue.directive('chat', function (value) {
    console.log(value.flower); //true
    console.log(value.image);  //false
})

ng里面对于指令的定义有一个restrict(限定符)概念,这个参数定义了指令所能存在的形式:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//Angular.js代码
angular.module('webcourse', []).directive('chat', function() {
    return {
        restrict: 'EACM', //看这里看这里看这里
        template: ...,
        scope: {},
        ....
    };
});

这个EACM分别是四种指令形式:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<!-- E : element 元素 -->
<chat></chat>

<!-- A : attribute  属性 -->
<div chat="expression"></div>

<!-- C : class 类名 -->
<div class="chat: expression"></div>

<!-- M : comment 元素 -->
<-- directive: chat expression -->
<!-- 不要问我为什么comment不是C而是M,Cross-Site Scripting为啥叫XSS,恩?有本事叫CSS-->
<!-- 拯救强迫症:M就当是markdown可以了吧可以了吧可以了吧 -->

扯上面ng这么多其实就是想说vue支持的元素指令,其实就相当于ng的E。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Vue.elementDirective('chat', function() {
    ...
});

然后

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<chat></chat>

其他选项

属性

描述

params

引入需要的属性值

deep

深层监听

twoWay

需要对属性值赋值修改(容我吐槽twoway这个名字实在太low了)

acceptStatement

允许使用内联语句

priority

指令优先级,高的先执行

terminal

自定义编译元素和后代元素的逻辑,比较高级的技巧

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<div v-chat="expression" dataId="hello"></div>
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Vue.directive('chat', {
    params: ['a'],
    twoWay: true,
    bind: function () {
        console.log(this.params.dataId); // -> "hello"
        this.set(this.el.value);
    }
})

以上大概是vue.js指令系统的一个入门= =

其它部分且听下回分解= =

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Vue.js-自定义指令 原
除了默认设置的核心指令(v-model 和v-show),Vue也允许注册自定义指令。注意在Vue2.0里面,代码复用的主要形式和抽象是组件--然而,有的情况下,你 仍然需要对纯DOM元素进行底层操作,这时候就会用到自定义指令。下面这个例子将聚焦一个input元素,像这样在页面加载时,元素将获得焦点(注意,autofocus在移动版Safari上不工作),事实上,你访问后还没点击任何内容,input就获得了焦点,现在让我们完善这个指令:
tianyawhl
2019/04/04
8760
Vue.js 自定义指令
除了默认设置的核心指令( v-model 和 v-show ), Vue 也允许注册自定义指令。
陈不成i
2021/07/27
8250
Vue有什么特性,相对于其他框架都有那些优势!
Vue所提供的一些相对高级的特性,表单操作,自定义指令,计算属性,过滤器,侦听器,生命周期。
达达前端
2020/02/18
1.5K0
Vue有什么特性,相对于其他框架都有那些优势!
Vue.js 2 基础用法
在底层的实现上,Vue将模板编译成虚拟DOM渲染函数。结合响应式系统,Vue能智能计算出最少需要重新渲染多少组件,并把DOM操作次数减到最少。
Cellinlab
2023/05/17
7.2K0
Vue.js 2 基础用法
Vue03基础语法--Vue组件+样式绑定+修饰符+常用控件+自定义指令+自定义事件
定义语法:new Vue({el:'#d1',components:{组件名:{配置选项}}})
天蝎座的程序媛
2022/11/18
1.2K0
​Vue自定义指令:深度解析与实战应用
大家好,我是腾讯云开发者社区的 Front_Yue,本篇文章将深入解析 Vue 自定义指令的原理、用法和实战应用,帮助开发者更好地掌握此功能。
Front_Yue
2024/04/17
2430
​Vue自定义指令:深度解析与实战应用
详细解析Vue自定义指令:一看就会的教程
Vue提供的指令方便了我们开发,有时我们需要对DOM 底层进行操作,就可以用自定义指令。
程序员海军
2023/11/25
3640
vue自定义指令
vue除了提供了v-model、v-show、v-if等默认指令,还允许注册了自定义指令。比如在需要对DOM元素进行底层操作的时候,就会用到自定义指令。
用户3258338
2019/07/19
6370
vue自定义指令
vue初
指令总结 v-bind 可以绑定属性,包括class style,而已省略,使用:替代 在1vue.0中有三种修饰符,.sync,.once,.camel,在2.0中能够废弃了前面两个 .camel将绑定的特性的名称转化为驼峰法则命名
河湾欢儿
2018/09/06
1K0
Vue.js入门笔记 Vue基本指令学习
操作元素的 class 列表和内联样式是数据绑定的一个常见需求。因为它们都是属性,所以我们可以用 v-bind 处理它们:只需要通过表达式计算出字符串结果即可。
Meng小羽
2019/12/24
5160
[前端学习]一文 Vue指令
文章目录 内置指令 v-html指令: 样例: v-text指令: 样例: v-cloak指令(没有值): 案例: v-once指令: v-pre指令: 其余常见的指令 自定义指令 输入框 内置指令 v-html指令: 1.作用:向指定节点中渲染包含html结构的内容。 2.与插值语法的区别: (1).v-html会替换掉节点中所有的内容,{{xx}}则不会。 (2).v-html可以识别html结构。 3.严重注意:v-html有安全性问题!!!! (1).在网站上动态渲染任意HTM
Maynor
2021/12/07
7580
Vue教程11(自定义指令)
  本文前面已经介绍了好几个系统提供的指令,比如"v-text",“v-bind”,"v-on"等等,本文我们来介绍下自定义指令的实现。
用户4919348
2019/07/18
5930
Vue教程11(自定义指令)
Vue 相关学习笔记(一)
可能有安全问题, 一般只在可信任内容上使用 v-html,永不用在用户提交的内容上
用户6808043
2022/02/24
7.5K0
Vue 相关学习笔记(一)
【VUE】vue2.x与vue3.x中自定义指令详解
vue自定义指令(2.x丨3.x)可以帮助我们实现需要操作,比如防抖、节流、懒加载、输入框自动聚焦等等,使用起来非常方便,比如vue自带的v-text、v-html、v-show、v-if等等。
不叫猫先生
2023/11/19
3510
【VUE】vue2.x与vue3.x中自定义指令详解
Vue 核心基础(2.X)
一、Vue 的基本认识 20201225195043.png 官网: 英文官网: https://vuejs.org/ 中文官网: https://cn.vuejs.org/ 1、Vue 的特点 遵循MVVM 模式 编码简洁,体积小,运行效率高,适合移动/ PC 端开发 它本身只关注 UI, 可以轻松的引入 vue 插件或其他的第三库开发项目 二、Vue 的基本使用 永远的 HelloWord 编码: <div id="app"> <input type="text" v-model="username
OY
2022/03/18
1.8K0
Vue 核心基础(2.X)
前端成神之路-vue02
Vue常用特性 表单基本操作 表单修饰符 自定义指令 内置指令不能满足我们特殊的需求 Vue允许我们自定义指令 Vue.directive 注册全局指令 <!-- 使用自定义的指令,只需在对用的元素中,加上'v-'的前缀形成类似于内部指令'v-if','v-text'的形式。 --> <input type="text" v-focus> <script> // 注意点: // 1、 在自定义指令中 如果以驼峰命名的方式定义 如 Vue.directive('focusA',functio
海仔
2021/03/03
1.9K0
vue中extend,mixins,extends,components,install的几个操作
结论: Vue.extend实际是创建一个构造器,对应的初始化构造器,并将其挂载到标签上
火狼1
2019/04/17
1.7K0
vue2笔记3 过滤器 指令 生命周期
v-text 向标签插入文本,不支持html标签解析 v-html 向标签插入html,支持结构解析,注意XSS攻击 v-clock 保持在元素上直到关联Vue实例结束编译,可用于隐藏未编译的标签
路过君
2022/04/13
5420
vue2笔记3 过滤器 指令 生命周期
前端三大框架之Vue-day02
Vue常用特性 表单基本操作 获取单选框中的值 通过v-model <!-- 1、 两个单选框需要同时通过v-model 双向绑定 一个值 2、 每一个单选框必须要有value属性 且value 值不能一样 3、 当某一个单选框选中的时候 v-model 会将当前的 value值 改变 data 中的 数据 gender 的值就是选中的值,我们只需要实时监控他的值就可以了 --> <input type="radio" id="male" value="1
用户10169043
2022/11/16
1.6K0
Vue1.x 写法示例
常见内置过滤器 capitalize, uppercase, lowercase, json, limitBy, filterBy。所有见这里。
前端GoGoGo
2018/08/24
7540
相关推荐
Vue.js-自定义指令 原
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验