Vue2入门之超详细教程十八-自定义指令

news/2024/10/24 19:17:09/文章来源:https://www.cnblogs.com/lirongyang/p/17951122

Vue2入门之超详细教程十四-自定义指令

1、简介

  • 定义语法
    • 分为局部自定义指令和全局自定义指令
  • 配置对象中常用的3个回调
    • bind:指令与蒜素被插入成功时调用
    • inserted:指令所在元素被插入页面时被调用
    • update:指令所在模板结构被重新解析时调用
  • 备注:
    • 指令定义时不加v-,但使用时要加v-
    • 指令名如果是多个单词,要使用kebab-case命名方式,不要用camelCase命名

学习Vue之前最后会一些HTML和CSS的基础知识,HTML基础知识 传送门,CSS基础知识 传送门。

2、自定义指令

1. 局部自定义指令

需求1:定义一个v-big指令,和v-text功能类似,但会把绑定的数值放大10倍

需求2:定义一个v-fbind指令,和v-bind功能类似,但可以让其所绑定的input元素默认获取焦点

需求1实现

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><script type="text/javascript" src="../js/development/vue.js"></script>
</head>
<body><div id="root"><h2>当前n的值是<span v-text="n"></span></h2><h2>放大10倍后的n值是:<span v-big="n"></span></h2><button @click="n++">点我n+1</button></div>
</body>
<script type="text/javascript">new Vue({el:'#root',data(){return {n:1,}}})
</script>
</html>

image-20240107155344516

该错误是因为我们用了一个不存在的指令v-big,v-big是原生Vue中不存在的质量,我们需要给它定义一个

directives:{big(element,binding){console.log(element,binding)}
}

image-20240107161620308

自定义指令接收两个参数,第一个是真实dom第二个是虚拟dom

directives:{big(element,binding){element.innerText = binding.value * 10}
}

image-20240107161821194

需求2实现

<input type="text" v-fbind:value="n">
directives:{fbind(element,binding){element.value = binding.valueelement.focus()}
}

image-20240107163141324

这样写有一个问题,即当页面刚渲染时,input输入框并不会获取焦点,只有当点击按钮后才会获取焦点

这是因为我们调用element.focus()时,input输入框还没有形成

fbind:{//指令与元素成功绑定时(一上来)bind(element,binding){element.value = binding.value},// 指令所在元素被插入页面时inserted(element,binding){ element.focus()},// 指令所在模板被重新解析时update(element,binding){element.value = binding.valueelement.focus()}
}

2. 全局自定义指令


Vue.directive('fbind',{//指令与元素成功绑定时(一上来)bind(element,binding){element.value = binding.value},// 指令所在元素被插入页面时inserted(element,binding){ element.focus()},// 指令所在模板被重新解析时update(element,binding){element.value = binding.valueelement.focus()}
})
Vue.directive('big',{big(element,binding){element.innerText = binding.value * 10console.log(element,binding)}
})

3、完整代码

1. 局部自定义指令完整代码

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><script type="text/javascript" src="../js/development/vue.js"></script>
</head>
<body><div id="root"><h2>当前n的值是<span v-text="n"></span></h2><h2>放大10倍后的n值是:<span v-big="n"></span></h2><button @click="n++">点我n+1</button><br><input type="text" v-fbind:value="n"></div>
</body>
<script type="text/javascript">new Vue({el:'#root',data(){return {n:1,}},directives:{big(element,binding){element.innerText = binding.value * 10console.log(element,binding)},fbind:{//指令与元素成功绑定时(一上来)bind(element,binding){element.value = binding.value},// 指令所在元素被插入页面时inserted(element,binding){ element.focus()},// 指令所在模板被重新解析时update(element,binding){element.value = binding.valueelement.focus()}}}})
</script>
</html>

2. 全局自定义指令完整代码

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><script type="text/javascript" src="../js/development/vue.js"></script>
</head>
<body><div id="root"><h2>当前n的值是<span v-text="n"></span></h2><h2>放大10倍后的n值是:<span v-big="n"></span></h2><button @click="n++">点我n+1</button><br><input type="text" v-fbind:value="n"></div>
</body>
<script type="text/javascript">Vue.directive('fbind',{//指令与元素成功绑定时(一上来)bind(element,binding){element.value = binding.value},// 指令所在元素被插入页面时inserted(element,binding){ element.focus()},// 指令所在模板被重新解析时update(element,binding){element.value = binding.valueelement.focus()}})Vue.directive('big',{big(element,binding){element.innerText = binding.value * 10console.log(element,binding)}})new Vue({el:'#root',data(){return {n:1,}}})
</script>
</html>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/724103.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

龙哥量化:通达信牛股低位起涨指标公式源码

如果您需要代写公式, 请联系我。 龙哥QQ:591438821 龙哥微信:Long622889 VAR1:=3*SMA((CLOSE-LLV(LOW,27))/(HHV(HIGH,27)-LLV(LOW,27))*100,5,1)-2*SMA(SMA((CLOSE-LLV(LOW,27))/(HHV(HIGH,27)-LLV(LOW,27))*100,5,1),3,1);VAR2:=EMA(VAR1,8);VAR3:=3*SMA((C-LLV(L,55))/(H…

龙哥量化:通达信回踩买入指标公式源码

如果您需要代写公式, 请联系我。 龙哥QQ:591438821 龙哥微信:Long622889A1:=COUNT(C<O,5)<=3;A2:=C/REF(C,5)<0.85;A3:=(MA(CLOSE,5)-C)/MA(CLOSE,5)<0.2;A4:=MA(C,20)>REF(MA(C,20),1);A5:=(REF(C,1)-C)/REF(C,1)>0.09;回踩买入:=A1 AND A2 AND A3 AND A…

企业跨境文件传输的核心痛点,怎样保证稳定可靠的传输性能?

随着经济和国际贸易的发展,企业跨境文件传输日趋频繁,多个行业均存在高频且大量的跨境文件传输需求:跨境电子商务: 跨境电商平台需要进行跨国的订单、支付和物流信息的传输,以便顺利完成交易和配送。涉及跨国企业的内部沟通、订单管理、跨境电商的订单处理等。 金融服务:…

用于将字节进行base64编码或解码(C语言实现)

用于将数据进行base64编码或解码,模块化封装, 已测试.V1.0 2024年6月13日 发布于博客园目录base64.hbase64.c 基本原理见代码注释! base64.h #ifndef _BASE64_H #define _BASE64_H /*** @file name : base64.h* @brief : 用于将字节进行base64编码或解码* @author : RIS…

初始MyBatis ,详细步骤运行第一个MyBatis程序,同时对应步骤MyBatis底层剖析

1. 初始MyBatis ,详细步骤运行第一个MyBatis程序,同时对应步骤MyBatis底层剖析 @目录1. 初始MyBatis ,详细步骤运行第一个MyBatis程序,同时对应步骤MyBatis底层剖析每博一文案2. 前沿知识2.1 框架(framework)2.2 三层架构2.3 分析 JDBC 的缺点3. 初始了解MyBatis4. MyBat…

VSCode弹窗无法应用,终端无法键入命令行解决方法

1、VSCode弹窗无法应用 解决方式:卸载通义灵码插件 2.终端无法键入命令行 解决方式:取消兼容模式,添加设置

快速识别你家的猫猫狗狗,教你用ModelBox开发AI萌宠应用

本文介绍了如何使用ModelBox开发一个动物目标检测的AI应用,从而掌握图片标注、数据处理和模型训练方法,以及对应的推理应用逻辑。本文分享自华为云社区《ModelBox-AI应用开发:动物目标检测【玩转华为云】》,作者:阳光大猫。 一、准备环境 ModelBox端云协同AI开发套件(Win…

Open WebUI

Open WebUI https://docs.openwebui.com/ ollama UI的独立演进版本。 不负责模型的部署。 可以对接 ollama后台 和 openai 接口。Open WebUI is an extensible, feature-rich, and user-friendly self-hosted WebUI designed to operate entirely offline. It supports various…

Console.log 美化

美化代码 // 美化打印实现方法 const prettyLog = () => {const isProduction = import.meta.env.MODE === "production";const isEmpty = (value: any) => {return value == null || value === undefined || value === "";};const prettyPrint = (t…

性能分析: 快速定位SQL问题

在数据库性能调优的实践中,SQL性能分析是至关重要的一环。一个执行效率低下的SQL语句可能会导致整个系统的性能瓶颈。 为了快速定位并解决这些问题,我们需要对SQL进行性能分析。本文将介绍一些常用的方法和技术,帮助大家快速定位SQL问题。 1、找出执行时间最长的SQL 首先,我…

IP地址按照数值大小进行排序

sort -n -t . -k1,1 -k2,2 -k3,3 -k4,4 ip.txt -n: 指示 sort 进行数值排序,而不是默认的字典序排序。 -t .: 设置字段的分隔符为点(.)。这通常用于处理IP地址或版本号等以点分隔的数值。 -k1,1 -k2,2 -k3,3 -k4,4: 这些是排序的关键部分,指定了排序的键。

坚持与确定性:毒药还是良药?

趁现在就改变,千万别让确定性这副慢性毒药继续侵蚀我们的思想。前段时间跟几个大龄程序员一起吃饭,聊了大家的现状,后来写了篇博客总结了一下《从大龄程序员现状聊聊出路》,本想着给朋友们提供些观点和思路,结果被有些网友批评了。 1. 我的认知达不到赚快钱 有的网友认为我…