IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> Vue 基础语法之自定义指令 -> 正文阅读

[JavaScript知识库]Vue 基础语法之自定义指令

1、注册全局指令

虽然 Vue 提供了很多内置指令可以实现动态数据渲染(v-model)、事件绑定(v-on)、流程控制(v-if/v-for)等,但是在实际开发过程中,如果遇到经常发生的功能场景,可以自己注册一个全局指令或在当前组件中组成一个自定义指令。

基础语法

Vue 提供的全局 API 中一个用于注册全局指令的方法 Vue.driective() ,通过这个方法可以注册全局使用的自定义指令,语法如下:

Vue.directive('name', {
  inserted: function (el) {
    // ...
  }
})

Vue.directive(name, options) 全局函数有两个参数,第一个参数是自定义指令的名字,第二个参数是配置项对象(或函数),配置对象中可以定义一些钩子函数,示例代码如下:

Vue.directive('directiveName', {
  bind: function () {},
  inserted: function () {},
  update: function () {},
  componentUpdated: function () {},
  unbind: function () {}
})

钩子函数

这些钩子函数会在指定的时机被自定调用,具体执行时机包括:

  • bind():当指令第一次绑定到元素时被调用,并且只会被调用一次,一般用于初始化配置;
  • inserted():当绑定的元素被插入到父元素时被调用;
  • update():当绑定的组件被更新时调用,但会在其子组件更新之前被调用;
  • componentUpdated():当绑定的组件及其子组件全部更新之后被调用;
  • unbind():当指令和绑定的元素解绑时被调用,并且只会被调用一次;

Vue.directive() 的第二个配置项参数中可以声明一个或多个钩子函数,这些钩子函数会在不同的时机被执行,这些钩子函数中都有相同的参数,这些参数被称为“钩子函数参数”。

钩子函数参数包括:

  • el:被绑定的元素 DOM 对象,与 Document.getElementById('') 获取到的 DOM 对象是一样的;
  • binding:与指令信息相关的对象;
  • vnode:Vue 编译生成的虚拟节点;
  • oldVnode:上一个虚拟节点,仅在 updatecomponentUpdated 钩子中可用。

自定义指令案例

如果想设计一个指令,只要绑定了该指令的元素,其内部的文本节点样式都改为红色。注册全局指令的示例代码如下:

<div id="app">
	<p v-red>{{msg}}</p>
</div>
<script src="js/v2.6.10/vue.js" type="text/javascript" charset="utf-8"></script>
<script type="text/javascript">
	Vue.directive('red', {
		inserted(el) {
			el.style.color = 'red'
		}
	})

	new Vue({
		el: '#app',
		data: {
			msg: 'hello'
		}
	})
</script>

在浏览器中运行的效果如下:
在这里插入图片描述

我们再来升级一下自定义指令的功能,如果要定义一个修改颜色的指令,通过指令绑定的值来设置元素的文本节点颜色。示例代码如下:

<div id="app">
	<p v-color="styleColor">{{msg}}</p>
</div>
<script src="js/v2.6.10/vue.js" type="text/javascript" charset="utf-8"></script>
<script type="text/javascript">
	Vue.directive('color', {
		inserted(el,binding) {
			el.style.color = binding.value
		}
	})

	new Vue({
		el: '#app',
		data: {
			msg: 'hello',
			styleColor: '#37f'
		}
	})
</script>

在浏览器中运行的效果如下:
在这里插入图片描述
上面案例中使用的自定义指令的钩子函数是 inserted ,我们也可以使用其他的钩子函数完成上面的案例,很多时候为了简化代码,可能不太考虑使用哪个钩子函数,如果想在 bindupdate 时触发相同的功能,可以使用函数简写的方式。示例代码如下:

Vue.directive('color', function(el, binding) {
	// ...
})

2、注册局部指令

Vue 的全局 API 函数注册的指令可以被当前项目中所有的组件所使用,如果只想为一个组件注册自定义指令的话,可以在 Vue 实例对象中注册自定义指令。

我们还以上面的案例为示例,如果要在 Vue 实例组件中注册,代码如下:

<div id="app">
	<p v-color="styleColor">{{msg}}</p>
</div>
<script src="js/v2.6.10/vue.js" type="text/javascript" charset="utf-8"></script>
<script type="text/javascript">
	new Vue({
		el: '#app',
		data: {
			msg: 'hello',
			styleColor: '#f56'
		},
		directives: {
			color: {
				inserted(el, binding) {
					el.style.color = binding.value
				}
			}
		}
	})
</script>

在浏览器中运行的效果如下:
在这里插入图片描述

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2021-11-29 16:13:51  更:2021-11-29 16:15:10 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 8:04:52-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码