当前位置: 首页 > article >正文

Vue学习教程-15自定义指令

文章目录

  • 前言
  • 一、局部注册自定义指令
  • 二、全局指令


前言

在Vue中,自定义指令是一种强大的功能,允许你直接在DOM上注册一些自定义行为。这可以用来创建可复用的功能,比如焦点处理、文本输入限制、自定义事件监听等。自定义指令可以通过全局注册或组件内注册。


一、局部注册自定义指令

需求1:定义一个v-big指令,和v-text功能类似,但会把绑定的数值放大10倍。
需求2:定义一个v-focus指令,和v-bind功能类似,但可以让其所绑定的input元素默认获取焦点。
自定义指令总结:
一、定义语法:
(1).局部指令:
new Vue({
directives:{指令名:配置对象}
})
或者
new Vue({
directives{指令名:回调函数}
})

二、配置对象中常用的3个回调:
(1).bind:指令与元素成功绑定时调用。
(2).inserted:指令所在元素被插入页面时调用。
(3).update:指令所在模板结构被重新解析时调用。

三、备注:
1.指令定义时不加v-,但使用时要加v-;
2.指令名如果是多个单词,要使用kebab-case命名方式,不要用camelCase命名。

<head>
	<meta charset="UTF-8" />
	<title>自定义指令</title>
	<script type="text/javascript" src="../js/vue.js"></script>
</head>
<body>
	<!-- 准备好一个容器-->
	<div id="root">
		<h2>{{name}}</h2>
		<h2>当前的n值是:<span v-text="n"></span> </h2>
		<!-- <h2>放大10倍后的n值是:<span v-big-number="n"></span> </h2> -->
		<h2>放大10倍后的n值是:<span v-big="n"></span> </h2>
		<button @click="n++">点我n+1</button>
		<hr/>
		<input type="text" v-focus:value="n">
	</div>
</body>
	
<script type="text/javascript">
	Vue.config.productionTip = false
	// 创建实例
	const vm = new Vue({
		el:'#root',
		data:{
			name:'百度',
			n:1
		},
		directives:{
			//big函数何时会被调用?1.指令与元素成功绑定时(一上来就绑定)。2.指令所在的模板被重新解析时。
			big(element,binding){
				console.log(element,this) //注意此处的this是window
				// console.log('big')
				element.innerText = binding.value * 10
			},
			focus:{
				//指令与元素成功绑定时(一上来)
				bind(element,binding){
					element.value = binding.value
				},
				//指令所在元素被插入页面时
				inserted(element,binding){
					element.focus()
				},
				//指令所在的模板被重新解析时
				update(element,binding){
					element.value = binding.value
				}
			}
		}
	})
	
</script>

二、全局指令

全局指令:
Vue.directive(指令名,配置对象) 或 Vue.directive(指令名,回调函数)

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

http://www.kler.cn/a/558498.html

相关文章:

  • DeepSeek核心技术全景解析:架构革新与工程突破
  • 力扣-贪心-45 跳跃游戏
  • MyBatis XML映射文件中的批量插入和更新
  • 【LLM】R1复现项目(SimpleRL、OpenR1、LogitRL、TinyZero)持续更新
  • 我的世界地下城DLC开发的第二天
  • Kafka安装
  • Linux:进程的认识
  • win32汇编环境,窗口程序中使用菜单示例四
  • 【java】就近原则
  • vscode@右键文件夹或文件vscode打开一键配置
  • for循环可遍历但不可以修改列表原因分析
  • 物联网常见协议基础学习
  • 【软考】【2025年系统分析师拿证之路】【啃书】第十三章 系统设计(十四)
  • CSS基础(盒子模型的组成、内容溢出、隐藏元素的方式、样式的继承、元素的默认样式、布局技巧、元素之间的空白问题、行内块元素的幽灵空白问题)
  • 利用 AI 大模型驱动企业智能化转型:Cherry Studio 与 Anything LLM 的应用探索
  • 海康威视摄像头ISUP(原EHOME协议) 摄像头实时预览springboot 版本java实现,并可以在浏览器vue前端播放(附带源码)
  • deepseek云端部署及结合本地知识库(结合api调用)可视化界面应用
  • 【拓展】二进制的原码、补码、反码及相互转换方式
  • Linux系统管理与编程01:准备工作
  • 深度学习(3)-TensorFlow入门(梯度带)