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

Vue3中自定义指令

自定义指令

    • 1. 认识自定义指令
    • 1.2. 自定义指令分为两种:
    • 1.3. 自定义指令的简单案例: 当某个元素挂载完成后可以自动获取焦点
    • 1.4. 自定义指令的生命周期
    • 1.5. 自定义指令参数和修饰符
    • 1.6. 统一抽取自定义全局指令

1. 认识自定义指令

  • 1.1. 在Vue的模板语法中有各种各样的质量:v-show,v-for, v-model等,除了使用这些指令外,Vue也允许我们来自定义自己的指令
    • 1.1.1. 注意:在Vue中,代码的复用和抽象主要还是通过组件;
    • 1.1.2. 通常在某些情况下,需要对DOM元素进行底层操作,这个时候就会用到自定义指令

1.2. 自定义指令分为两种:

  • 1.2.1. 全局指令:appdirective方法,可以在任意组件中被使用
  • 1.2.2. 局部指令:组件中通过的directives方法,只能在当前组件中使用

1.3. 自定义指令的简单案例: 当某个元素挂载完成后可以自动获取焦点

  • 1.3.1. 实现方式一: 使用默认的实现方式
  • 1.3.2. 实现方式二: 自定义一个v-focus的局部指令
    • 1.3.2.1. options实现方式

      • 自定义指令实现,需要在组件选项中使用directives
      • 它是一个对象,在对象中编写自定义指令的名称(注意:这里不需要加v-);
      • 自定义指令有一个生命周期,是在组件挂载后调用的mounted, 可以在其中完成操作
      • 代码如下:
          <script>export default {directives: {focus: {mounted (el) {// 生命周期的函数(自定义指令)el?.focus()}}}}</script>
        
    • 1.3.2.2. Composition Api 实现方式

      • 自定义局部指令, 必须v开头
      • 代码如下:
          <script setup>// 2. 方式二: 自定义局部指令, 必须v开头const vFocus = {mounted (el) {// 生命周期的函数(自定义指令)el?.focus()}}</script>
        
    • 1.3.3. 实现方式三: 自定义一个v-focus的全局指令

      • 代码如下:
        const app = createApp(App)//  自定义全局指令app.directive('focus', {mounted (el) {el.focus()}})app.mount('#app')
      

1.4. 自定义指令的生命周期

  • created: 在绑定元素的attribute或时间监听器被应用之前调用;

  • beforeMount: 当指令第一次绑定到元素并且挂载父组件之前调用;

  • mounted: 在绑定元素的父组件被挂载后调用;

  • beforeUpdate: 在更新包含组件的VNode之前调用;

  • updated: 在更新包含组件的VNode及其子组件的VNode更新后调用;

  • beforeUnmount: 在卸载绑定元素的父组件之前调用;

  • unmounted: 当指令与元素解除绑定且父组件已卸载时,只调用一次;

  • 代码如下:

      <script setup>const vWhy = {created () {console.log('created');},beforeMount () {console.log('beforeMount');},mounted(el) {console.log('mounted');},beforeUpdate () {console.log('beforeUpdate');},updated () {console.log('updated');},beforeUnmount () {console.log('beforeUnmount');},unmounted () {console.log('unmounted');}}</script>

1.5. 自定义指令参数和修饰符

  • 代码如下:
    <!-- 自定义指令的参数和修饰符v-model:title.lazy.trim="message"title: 指令参数 -> args -> argumentslazy: 修饰符 -> modifiers -> 懒加载trim: 修饰符 -> modifiers -> 去除空格message: 绑定的变量,值 -> value -> 最后赋值给title--><input type="text" v-model:title.lazy.trim="message"> 
    
  • 案例代码如下:
      <template><div class="app">// 1.参数-修饰符-值<h2 v-why:kobe.cba.abc="message" class="title">哈哈哈</h2>//  <!-- 2.价格拼接单位符号 --><h2 v-unit>{{ 111 }}</h2></div></template><script setup>import { ref } from 'vue';const price = ref(111);const unit = ref('¥')const message = ref('你好,李银河');const vWhy = {mounted(el, bindings) {el.textContent = bindings.value},}</script>
    

1.6. 统一抽取自定义全局指令

  • 1.6.1. 创建directives文件夹

    // 在main.js中引入import { useDirectives } from './01_自定义指令/directives/index.js'const app = createApp(App)useDirectives(app)```
  • 1.6.2. directives下创建index.js统一导入导出所有自定义指令

       // 导入对应指令文件import  directiveUnit from "./unit";// 导出useDirective函数并执行指令export function useDirectives (app) {directiveUnit(app)} ```
    
  • 1.6.3. 创建指令.js文件 (例如: unit.js)

       export default function directiveUnit (app) {app.directive('unit', {mounted (el, bindings) {//  获取默认文本值const defaultText = el.textContent;// 如果没传单位参数,设置默认值let unit = bindings.value; if(!unit) {unit = '¥'}// 添加单位el.textContent = unit + defaultText}})}
    
http://www.xdnf.cn/news/725149.html

相关文章:

  • React项目在ios和安卓端要做一个渐变色背景,用css不支持,可使用react-native-linear-gradient
  • Syslog 全面介绍及在 C 语言中的应用
  • 第J2周:ResNet50V2算法实战与解析
  • 第二章支线二:浮空之域:布局法则深研
  • 003图书个性化推荐系统技术剖析:打造智能借阅新体验
  • 动态规划基础
  • CODEFORCES---1915A.Odd One Out
  • 颈部异常姿态背后的隐秘困扰
  • 004 flutter基础 初始文件讲解(3)
  • ElasticSearch迁移至openGauss
  • 【深度剖析】流处理系统性能优化:解决维表JOIN、数据倾斜与数据膨胀问题
  • flask入门
  • 响应式系统与Spring Boot响应式应用开发
  • 英语复习笔记 2
  • PHP7+MySQL5.6 查立得源码授权系统DNS验证版
  • 【算法提升】分组 day_tow
  • React-props
  • CppCon 2014 学习:Lock-Free Programming
  • 企业级安全实践:SSL/TLS 加密与权限管理(一)
  • 智绅科技——科技赋能健康养老,构建智慧晚年新生态
  • 研华工控机安装Windows10系统,适用UEFI(GPT)格式安装
  • 图解gpt之注意力机制原理与应用
  • 专业级图片分割解决方案
  • 火狐安装自动录制表单教程——仙盟自动化运营大衍灵机——仙盟创梦IDE
  • SpringBoot整合Sa-Token实现RBAC权限模型的过程解析
  • 使用 `\033` 方式设置终端字体颜色
  • .NET 查找 DLL 的路径顺序
  • 【图像处理基石】如何进行图像畸变校正?
  • vb.net oledb-Access 数据库本身不支持命名参数,赋值必须和参数顺序一致才行
  • 华为OD机试_2025 B卷_数组组成的最小数字(Python,100分)(附详细解题思路)