「Vue3系列」Vue3指令

本文涉及的产品
可观测监控 Prometheus 版,每月50GB免费额度
可观测可视化 Grafana 版,10个用户账号 1个月
性能测试 PTS,5000VUM额度
简介: Vue 3 指令是 Vue 模板中用于与 DOM 进行交互的特殊属性。指令以 `v-` 为前缀,后面跟着指令名称。Vue 3 提供了一系列内置指令,同时你也可以创建自定义指令

一、Vue3 指令

Vue 3 指令是 Vue 模板中用于与 DOM 进行交互的特殊属性。指令以 v- 为前缀,后面跟着指令名称。Vue 3 提供了一系列内置指令,同时你也可以创建自定义指令。下面是一些 Vue 3 中常用的内置指令:

  1. v-bind
    用于属性绑定,将表达式的结果绑定到一个元素的属性上。
<img v-bind:src="imageSrc" alt="Vue logo">
AI 代码解读

简写形式为 :

<img :src="imageSrc" alt="Vue logo">
AI 代码解读
  1. v-model
    用于在表单元素上创建双向数据绑定。
<input v-model="message" placeholder="edit me">
<p>Message is: {
  { message }}</p>
AI 代码解读
  1. v-on
    用于监听 DOM 事件,并在触发时执行一些 JavaScript 代码。
<button v-on:click="increment">Increment</button>
AI 代码解读

简写形式为 @

<button @click="increment">Increment</button>
AI 代码解读
  1. v-ifv-else-ifv-else
    用于条件渲染。根据表达式的值来决定是否渲染一个元素。
<div v-if="type === 'A'">
  Render A
</div>
<div v-else-if="type === 'B'">
  Render B
</div>
<div v-else>
  Render Others
</div>
AI 代码解读
  1. v-for
    用于列表渲染。基于源数据多次渲染一个元素或模板块。
<div v-for="item in items" :key="item.id">
  {
  { item.text }}
</div>
AI 代码解读
  1. v-show
    根据表达式的值的真假,切换元素的 display CSS 属性。
<p v-show="isVisible">Hello when visible</p>
AI 代码解读
  1. v-pre
    跳过这个元素和它的子元素的编译过程。可以用来显示原始的 Mustache 标签。
<div v-pre>
  {
  { this will not be compiled }}
</div>
AI 代码解读
  1. v-cloak
    这个指令保持在元素上直到关联实例结束编译。和 CSS 规则如 [v-cloak] { display: none } 一起用时,这个指令可以隐藏未编译的 Mustache 标签直到实例准备完毕。
<div v-cloak>
  {
  { message }}
</div>
AI 代码解读
[v-cloak] {
   
  display: none;
}
AI 代码解读
  1. v-once
    将元素和组件标记为只渲染一次。
<span v-once>This will only be rendered once.</span>
AI 代码解读
  1. v-text
    更新元素的 textContent

    <span v-text="message"></span>
    
    AI 代码解读
  2. v-html
    更新元素的 innerHTML

    <div v-html="htmlContent"></div>
    
    AI 代码解读

除了这些内置指令,Vue 3 还允许你注册自定义指令。自定义指令可以扩展 Vue 的基本功能,用于执行复杂的 DOM 操作或处理特定的业务逻辑。

二、注册-自定义指令

注册自定义指令有两种方式:全局注册和局部注册。全局注册的指令可以在任何 Vue 实例中使用,而局部注册的指令只能在特定的 Vue 实例或组件中使用。

注册自定义指令的基本语法如下:

// 全局注册
Vue.directive('focus', {
   
  // 当被绑定的元素插入到 DOM 中时……
  inserted: function (el) {
   
    // 聚焦元素
    el.focus()
  }
})

// 局部注册
const app = Vue.createApp({
   })

app.directive('focus', {
   
  // 定义指令
})

app.mount('#app')
AI 代码解读

三、常见自定义指令

在 Vue 3 中,自定义指令允许你注册一些可以在模板中重复使用的行为。这些行为可以附加到任何元素上,并在元素的特定生命周期钩子中执行自定义逻辑。以下是一些 Vue 3 中常见的自定义指令及其案例代码:

1. 聚焦指令(v-focus)

当页面加载时,自动将焦点聚焦到指定的元素上。

// main.js 或其他初始化文件
import {
    createApp } from 'vue'
import App from './App.vue'

const app = createApp(App)

// 全局注册自定义指令 v-focus
app.directive('focus', {
   
  mounted(el) {
   
    el.focus()
  }
})

app.mount('#app')
AI 代码解读
<!-- App.vue -->
<template>
  <div>
    <input v-focus type="text" placeholder="自动聚焦到这个输入框">
  </div>
</template>
AI 代码解读

2. 高亮指令(v-highlight)

将匹配的文本在元素中进行高亮显示。

// main.js 或其他初始化文件
import {
    createApp } from 'vue'
import App from './App.vue'

const app = createApp(App)

// 全局注册自定义指令 v-highlight
app.directive('highlight', {
   
  beforeMount(el, binding) {
   
    el.innerHTML = el.innerHTML.replace(new RegExp(binding.value, 'gi'), function(matched) {
   
      return `<span style="background-color: yellow;">${
     matched}</span>`
    })
  }
})

app.mount('#app')
AI 代码解读
<!-- App.vue -->
<template>
  <div>
    <p v-highlight="'vue'">在这里,'vue' 会被高亮显示。</p>
  </div>
</template>
AI 代码解读

3. 防抖指令(v-debounce)

对事件处理函数进行防抖处理,减少不必要的计算或请求。

// main.js 或其他初始化文件
import {
    createApp } from 'vue'
import App from './App.vue'

const app = createApp(App)

// 全局注册自定义指令 v-debounce
app.directive('debounce', {
   
  beforeMount(el, binding) {
   
    let timer = null
    el.addEventListener('input', function() {
   
      clearTimeout(timer)
      timer = setTimeout(() => {
   
        binding.value()
      }, binding.arg || 500)
    })
  }
})

app.mount('#app')
AI 代码解读
<!-- App.vue -->
<template>
  <div>
    <input v-debounce="search" type="text" placeholder="防抖处理,输入后延迟500ms执行">
  </div>
</template>

<script>
export default {
    
  methods: {
    
    search() {
    
      console.log('执行搜索')
    }
  }
}
</script>
AI 代码解读

4. 限制输入指令(v-limit)

限制输入框中字符的数量。

// main.js 或其他初始化文件
import {
    createApp } from 'vue'
import App from './App.vue'

const app = createApp(App)

// 全局注册自定义指令 v-limit
app.directive('limit', {
   
  mounted(el, binding) {
   
    el.addEventListener('input', function() {
   
      if (el.value.length > binding.value) {
   
        el.value = el.value.slice(0, binding.value)
      }
    })
  }
})

app.mount('#app')
AI 代码解读
<!-- App.vue -->
<template>
  <div>
    <input v-limit="10" type="text" placeholder="最多输入10个字符">
  </div>
</template>
AI 代码解读

使用注意事项

  • 在使用自定义指令时,要确保指令名称不与 Vue 的内置指令名称冲突。
  • 在自定义指令的钩子函数中,el 参数是绑定指令的元素,binding 参数是一个对象,包含了一些有用的属性,如 name(指令名)、value(指令的绑定值)、oldValue(指令绑定的前一个值)、arg(指令的参数)、modifiers(包含修饰符的对象)。
  • 如果需要监听多个事件或进行更复杂的 DOM 操作,可以考虑

四、相关链接

  1. Vue3官方地址
  2. Vue3中文文档
目录
打赏
0
3
1
1
22
分享
相关文章
vue2和vue3的响应式原理有何不同?
大家好,我是V哥。本文详细对比了Vue 2与Vue 3的响应式原理:Vue 2基于`Object.defineProperty()`,适合小型项目但存在性能瓶颈;Vue 3采用`Proxy`,大幅优化初始化、更新性能及内存占用,更高效稳定。此外,我建议前端开发者关注鸿蒙趋势,2025年将是国产化替代关键期,推荐《鸿蒙 HarmonyOS 开发之路》卷1助你入行。老项目用Vue 2?不妨升级到Vue 3,提升用户体验!关注V哥爱编程,全栈开发轻松上手。
高效工作流:用Mermaid绘制你的专属流程图;如何在Vue3中导入mermaid绘制流程图
mermaid是一款非常优秀的基于 JavaScript 的图表绘制工具,可渲染 Markdown 启发的文本定义以动态创建和修改图表。非常适合新手学习或者做一些弱交互且自定义要求不高的图表 除了流程图以外,mermaid还支持序列图、类图、状态图、实体关系图等图表可供探索。 博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
你真的会使用Vue3的onMounted钩子函数吗?Vue3中onMounted的用法详解
onMounted作为vue3中最常用的钩子函数之一,能够灵活、随心应手的使用是每个Vue开发者的必修课,同时根据其不同写法的特性,来选择最合适最有利于维护的写法。博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
管理数据必备;侦听器watch用法详解,vue2与vue3中watch的变化与差异
一篇文章同时搞定Vue2和Vue3的侦听器,是不是很棒?不要忘了Vue3中多了一个可选项watchEffect噢。 博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
Vue3中v-model在处理自定义组件双向数据绑定时,如何避免循环引用?
Web 组件化是一种有效的开发方法,可以提高项目的质量、效率和可维护性。在实际项目中,要结合项目的具体情况,合理应用 Web 组件化的理念和技术,实现项目的成功实施和交付。通过不断地探索和实践,将 Web 组件化的优势充分发挥出来,为前端开发领域的发展做出贡献。
160 64
Vue3中v-model在处理自定义组件双向数据绑定时有哪些注意事项?
在使用`v-model`处理自定义组件双向数据绑定时,要仔细考虑各种因素,确保数据的准确传递和更新,同时提供良好的用户体验和代码可维护性。通过合理的设计和注意事项的遵循,能够更好地发挥`v-model`的优势,实现高效的双向数据绑定效果。
211 64
Vue 3 中 v-model 与 Vue 2 中 v-model 的区别是什么?
总的来说,Vue 3 中的 `v-model` 在灵活性、与组合式 API 的结合、对自定义组件的支持等方面都有了明显的提升和改进,使其更适应现代前端开发的需求和趋势。但需要注意的是,在迁移过程中可能需要对一些代码进行调整和适配。
220 60
|
5月前
|
Vue3中使用provide/inject来避免v-model的循环引用
`provide`和`inject`是 Vue 3 中非常有用的特性,在处理一些复杂的组件间通信问题时,可以提供一种灵活的解决方案。通过合理使用它们,可以帮助我们更好地避免`v-model`的循环引用问题,提高代码的质量和可维护性。
172 58
除了provide/inject,Vue3中还有哪些方式可以避免v-model的循环引用?
需要注意的是,在实际开发中,应根据具体的项目需求和组件结构来选择合适的方式来避免`v-model`的循环引用。同时,要综合考虑代码的可读性、可维护性和性能等因素,以确保系统的稳定和高效运行。
145 56

云原生

+关注

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等