第085个
本文章目录
- 示例效果图
- 示例源代码
- API 参考网址
Vue 自定义指令是一种用于扩展 Vue 模板功能的强大工具。通过自定义指令,你可以在 Vue 模板中添加自定义的行为和逻辑,使模板更加灵活和可定制。
以下是对 Vue 自定义指令的详细解释,并提供一个示例代码来帮助你更好地理解:
定义自定义指令:在 Vue 项目中,定义自定义指令需要创建一个全局或局部的指令对象。指令对象包含几个关键属性,如bind、inserted、update和unbind
等,用于处理指令的不同生命周期阶段。
Vue.directive('myDirective', {
bind: function(el, binding, vnode) {
// 指令绑定时的逻辑
},
inserted: function(el, binding, vnode) {
// 元素插入时的逻辑
},
update: function(el, binding, vnode) {
// 数据更新时的逻辑
},
unbind: function(el) {
// 指令解绑时的逻辑
}
});
- bind:指令绑定到元素时触发。这个阶段可以进行初始化操作,例如获取元素、设置数据等。
- inserted:元素插入到 DOM 时触发。可以在这个阶段执行与元素插入相关的操作,如添加事件监听器等。
- update:当绑定的数据发生变化时触发。可以在这里根据数据的变化更新元素的状态。
- unbind:指令从元素解绑时触发。这个阶段可以进行清理操作,如移除事件监听器等。
通过在指令对象的不同方法中编写相应的逻辑,可以实现各种自定义的行为和功能。
示例效果图
示例源代码
/*
* @Author: 大剑师兰特(xiaozhuanlan),还是大剑师兰特(CSDN)
* @此源代码版权归大剑师兰特所有,可供学习或商业项目中借鉴,未经授权,不得重复地发表到博客、论坛,问答,git等公共空间或网站中。
* @Email: 2909222303@qq.com
* @weixin: gis-dajianshi
* @First published in CSDN
* @First published time: 2024-02-17
*/
<template>
<div class="djs-box">
<div class="topBox">
<h3>vue自定义指令(图文示例)</h3>
<div>大剑师兰特, 还是大剑师兰特,gis-dajianshi</div>
</div>
<div class="dajianshi" id="dajianshi">
<h4>
选择结束时间:<el-date-picker v-model="endTime" type="datetime" placeholder="选择日期时间">
</el-date-picker>
</h4>
<h4 v-countdown="endTime"></h4>
</div>
</div>
</template>
<script>
import dayjs from "dayjs";
export default {
data() {
return {
endTime: new Date(),
timer:null,
}
},
directives: {
countdown: {
update: (el, binding) => {
console.log(el);
console.log(binding)
let timer=null;
if(timer!=null){
clearInterval(timer);
}
let usedTime = binding.value.getTime();
timer = setInterval(function() {
var now = new Date().getTime();
var remainingTime = usedTime - now;
if (remainingTime < 0) {
clearInterval(timer);
el.innerHTML = '倒计时已经结束';
} else {
el.innerHTML = ' 时间倒计时:' + Math.floor(remainingTime / 1000)+'秒';
}
}, 1000);
}
},
}
}
</script>
<style scoped>
.djs-box {
width: 1000px;
height: 650px;
margin: 50px auto;
border: 1px solid darkcyan;
}
.topBox {
margin: 0 auto 0px;
padding: 10px 0 20px;
background: darkcyan;
color: #fff;
}
.dajianshi {
width: 93%;
height: 470px;
margin: 5px auto 0;
border: 1px solid #369;
background-color: cde;
padding: 20px;
}
</style>
API 参考网址
https://v2.cn.vuejs.org/v2/guide/custom-directive.html