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

浅析vue3自定义指令

vue3中可以像下面这样使用自定义指令。
在这里插入图片描述
这里我们只是定义了一个vFoucs变量,vue怎么知道这是一个指令呢?

这是因为约定大于配置,vue3中有这样一个约定(截图来自官方文档):
在这里插入图片描述
注意这里说的是驼峰命令,如果是vfocus,那么vue并不会把它当成自定义指令。

这里还有一个隐藏的细节,就是vue只是约定了变量的名字,而没有约定变量的内容。换句话说,vue并不会检查变量值是否符合一个指令的必要条件,只要这个变量满足 v 开头的驼峰式命名,就会把他当成一个自定义指令,比如:

const vFocus = 1
const vFocus = "2";
const vFocus = {}

上面这几种形式都会被当成自定义指令来注册,只是它不是一个完整的实现,因此使用的时候没有任何效果,但也不会报错。

所以为了尽量避免混淆,我们应该尽量避免,给非自定义指令的变量使用 v 开头的驼峰式命名。

此外,我们应该注意到自定义指令,本质上就是一个js对象,因此我们完全可以将其独立到一个js文件中管理。

比如,我们可以用一个单独的js文件定义一个大指令。

// vFocus.js
export default {mounted: (el) => el.focus()
}

使用的时候只需要把它import进来就可以了:

<script setup>
import vFocus from './vFocus'
</script><template><input v-focus />
</template>

或者,你可以用一个js文件统一管理多个指令。

// directives.js
const vFocus =  {mounted: (el) => { el.focus();}
}const vDefaultValue = {mounted: (el) => { el.value = 123}}export {vFocus, vDefaultValue}

使用时,像下面这样引入:

<script setup>
import { vFocus, vDefaultValue} from './directives.js'
</script><template><input v-focus v-defaultValue />
</template>

注意:由于自定义指令就是一个js对象,所以定义的时候不必使用vXXX这种命名,只要导入的时候确保vXXX这种命名即可。

比如:

// directives.js
const focus =  {mounted: (el) => { el.focus();}
}const defaultValue = {mounted: (el) => { el.value = 123}}export {focus, defaultValue}

使用时,像下面这样引入:

<script setup>
import { focus as vFocus, defaultValues as vDefaultValue} from './directives.js'
</script><template><input v-focus v-defaultValue />
</template>
http://www.lryc.cn/news/349670.html

相关文章:

  • 后仿真中的关于延时问题(延迟类型选择和脉冲控制)
  • 欧拉公式e^(ix)=(cos x+isin x)
  • Android 获取已安装应用、包名、应用名、版本号、版本名
  • 2024数学建模深圳杯B题成品论文43页word+完整可视化结果图+可执行代码
  • 达梦(DM) SQL查询及联合查询
  • 【重生之我在学Android】WorkManager (章一)
  • 【强训笔记】day23
  • C语言-STM32:介绍PWM,并使用PWM实现呼吸灯
  • SpringBean详解
  • hive获取这周五到下周四的区间,周一到周日的区间
  • Iterable与Iterator
  • 免费Premiere模板,几何图形元素动画视频幻灯片模板素材下载
  • 数据结构与算法学习笔记九---循环队列的表示和实现(C++)
  • Mysql获取当前时间
  • 计算机服务器中了locked勒索病毒怎么解决,locked勒索病毒解密恢复工具
  • 基于springboot实现的在线动漫信息平台
  • C# Winform+Halcon结合标准视觉工具
  • 英语单词量测试
  • 三、安装node_exporter
  • kafka基础知识
  • 华为昇腾310B1平台视频解码失败[ERROR] Send frame to vdec failed, errorno:507018
  • Flutter 中的 SwitchListTile 小部件:全面指南
  • 详细分析Vue3中的defineExpose(附Demo)
  • 合合信息:TextIn文档解析技术与高精度文本向量化模型再加速
  • Git与Gitlab
  • MySQL数据库从入门到精通(下)
  • 从融媒到智媒,小程序框架可助力传媒企业在AI实践下的服务变现
  • MES系统在电线电缆行业生产上的应用
  • 怎么把图片上的字去掉
  • BFS和DFS优先搜索算法