自定义指令基本用法

server/2024/11/14 19:46:49/

自定义指令基本用法

      • 1.自定义指令案例一:输入框自动聚焦
      • 2.自定义指令生命周期和参数-修饰符
      • 3.封装全局自定义指令
        • 3.1 创建directive目录,创建index.js,创建format-xx文件
        • 3.1 main.js文件引入并传入全局对象
        • 3.3 组件中引用

自定义指令
Vue可以根据项目实际情况需要自定义指令。
注意:要对DOM元素进行底层操作就会需要自定义指令
自定义指令分为两种:
1. 自定义局部指令:组件中通过directives选项,只能在当前组件使用;
2. 自定义全局指令:app的directive方法,可以任意组件被使用;

1.自定义指令案例一:输入框自动聚焦

<template><div><input type="text" ref="input" v-focus></div>
</template><script>
import { ref, onMounted } from 'vue'export default {// 局部指令directives: {focus: {// 当input元素或者组件挂载到页面上的时候执行mounted(el, bingdings, vnode, preVnode){console.log('focus mounted');el.focus();}}},setup () {const input = ref(null)onMounted(() => {input.value.focus();})return {input}}}
</script>

2.自定义指令生命周期和参数-修饰符

指令的生命周期
created: 在绑定元素的attribute或事件监听器被应用之前调用。
beforeMounted: 当指令第一次绑定到元素并且在挂载父组件之前调用;
mounted: 在绑定元素的父组件被挂载后调用;
beforeUpdate: 在更新包含自建的VNode之前调用;
updated: 在包含组件的VNode及其子组件的VNode更新后调用;
beforeUnmount: 在卸载绑定元素的父组件之前调用;
unmounted: 当指令与元素解除绑定且父组件已卸载时,只调用一次

<template><div><input type="text" ref="input" v-focus><button v-why.aaaa.bbb="'coderwhy'" v-if="counter < 2 " @click="incremnt">当前计数;{{ counter }}</button></div>
</template><script>
import { ref, onMounted } from 'vue'export default {// 局部指令directives: {// focus: {//   // 当input元素或者组件挂载到页面上的时候执行//  mounted(el, bingdings, vnode, preVnode){//   console.log('focus mounted');//   el.focus();//  }// }why: {created (el,bingdings,vnode,preVnode) {console.log('why created',el,bingdings,vnode,preVnode);console.log(bingdings.value); // 取传参console.log(bingdings.modifiers); // 取修饰符},beforeMount () {console.log('why beforeMount');},mounted () {console.log('why mounted');},beforeUpdate () {console.log('why beforeUpdate');},updated () {console.log('why updated');},beforeUnmount () {console.log('why beforeUnmount');},unmounted () {console.log('why unmounted');}}},setup () {const input = ref(null)const counter = ref(0)const incremnt = () => {counter.value++}onMounted(() => {input.value.focus();})return {input,counter,incremnt}}}
</script>

3.封装全局自定义指令

3.1 创建directive目录,创建index.js,创建format-xx文件
// 1.index.js
import formatTime from './format-time'
export default function registerDirectives (app) {formatTime(app)
}// 2.format-time.js
import dayjs from 'dayjs'
export default function (app) {let formatString = 'YYYY-MM-DD HH:mm:ss'app.directive('format-time',{created(el,bingdings){if(bingdings.value){formatString = bingdings.value}},mounted(el,bingdings){console.log('format-time');let textContent = el.textContent;let timeStamp = parseInt(textContent);if(textContent.length === 10){  el.textContent = timeStamp * 1000;}el.textContent = dayjs(timeStamp).format(formatString)}})
}
3.1 main.js文件引入并传入全局对象
import registerDirectives from './11_自定义指令/directive'
registerDirectives(app)
3.3 组件中引用
<template><div><input type="text" ref="input" v-focus><button v-why.aaaa.bbb="'coderwhy'" v-if="counter < 2 " @click="incremnt">当前计数;{{ counter }}</button><h2 v-format-time="'YYYY/MM/DD HH:mm:ss'">{{ timeStamp }}</h2></div>
</template><script>
import { ref, onMounted } from 'vue'export default {// 局部指令directives: {setup () {const timeStamp = 1715001108724return {timeStamp}}}
</script>

http://www.ppmy.cn/server/36298.html

相关文章

单目标问题的烟花优化算法求解matlab仿真,对比PSO和GA

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 单目标问题的FW烟花优化算法求解matlab仿真,对比PSO和GA。最后将FW&#xff0c;GA&#xff0c;PSO三种优化算法的优化收敛曲线进行对比。 2.测试软件版本以及运行…

商城数据库88张表结构完整示意图51~60(十三)

五十一&#xff1a; 五十二&#xff1a; 五十三&#xff1a; 五十四&#xff1a; 五十五&#xff1a; 五十六&#xff1a; 五十七&#xff1a; 五十八&#xff1a; 五十九&#xff1a; 六十&#xff1a;

【前端】HTML实现个人简历信息展示页面

文章目录 前言一、 综合案例&#xff1a;个人简历信息展示页面 前言 这篇博客仅仅是对HTML的基本结构进行了一些说明&#xff0c;关于HTML的更多讲解以及CSS、Javascript部分的讲解可以关注一下下面的专栏&#xff0c;会持续更新的。 链接&#xff1a; Web前端学习专栏 下面我…

基于DE1-SOC的Nios V工程——My First Nios V

本教程演示如何在DE1-SOC开发板上创建一个基于Nios V 的SOPC系统&#xff0c;并在系统上运行Nios V软件工程。 一、Nios V简介 Nios V处理器是基于RISC-V规范的软知识产权(IP)处理器。 Nios V处理器系统相当于一个微控制器&#xff08;或“芯片级计算机”&#xff09;&#…

CANape中,Event list和DAQ list的区别介绍

1 基本介绍 在 Vector 的 CANape 中,事件列表 (Event list) 和 DAQ 列表 (DAQ list) 都用于定义和管理数据采集 (DAQ) 事件。但是,它们在目的和功能上有所不同。 事件列表 用于定义触发数据采集的事件。事件列表中的每个事件都与一组信号和触发条件相关联。当满足触发条件时…

语音识别之线性频谱图

⚠申明&#xff1a; 未经许可&#xff0c;禁止以任何形式转载&#xff0c;若要引用&#xff0c;请标注链接地址。 全文共计3077字&#xff0c;阅读大概需要3分钟 &#x1f308;更多学习内容&#xff0c; 欢迎&#x1f44f;关注&#x1f440;【文末】我的个人微信公众号&#xf…

换新电脑,配置环境,下载需要的软件(还在整理中)

开发要的工具软件 nvm node版本管理工具&#xff08;要在下载node之前配置好&#xff09;参考 Visual Studio Code 写vue、html等 HBuilder X 写uniapp的 微信开发者工具 开发小程序微信h5的 Postman 测试接口的 Firefox 备用浏览器 uTools 小工具 Adobe Photoshop 切图仔必备 …

连通“数据”,让制造变“聪明”

说起数据智能&#xff0c;你第一时间想到的是什么呢&#xff1f;是科技感十足的智慧城市&#xff1f;还是炫酷的人工智能景象&#xff1f; 数据作为企业的战略资产越来越受到重视&#xff0c;从最初的数据协助业务协同&#xff0c;转化为数据驱动业务&#xff0c;数据驱动运营…