iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >Vue在自定义指令绑定的处理函数中传递参数
  • 324
分享到

Vue在自定义指令绑定的处理函数中传递参数

Vue自定义指令Vue处理函数Vue传递参数 2023-03-10 14:03:05 324人浏览 独家记忆
摘要

目录在自定义指令绑定的处理函数中传递参数需求背景方式一:包装函数方式二:利用动态参数在自定义指令中的传递参数时value和expression的区别注意点总结在自定义指令绑定的处理函

在自定义指令绑定的处理函数中传递参数

需求背景

现在需要为自定义指令绑定函数,并且需要向函数中传递参数,类似 v-on="handleFunc(arg1, arg2)"。

Vue 的指令预期得到的值是一个 javascript 表达式,除了 v-on 和 v-for 这两个特殊指令外,其他的指令会自动计算该表达式的值,将最终的计算结果传递给指令。

所以自定义的指令不能用 v-mydirective="handleFunc(arg1, arg2)" 的形式绑定函数值,因为 handleFunc(arg1, arg2) 作为一个 JavaScript 表达式会被立即执行,最终会将其返回值传递给指令。

那么当我们想要为自定义指令绑定函数值,又想为其传递参数该怎么办呢?

方式一:包装函数

利用指令的值预期得到一个 JavaScript 表达式的特性,可以为其值绑定一个包装后的函数,从而实现传递参数的目的。如下

<div v-mydirective="() => {handleFunc(arg1, arg2)}"><div>

在上面的示例中,v- mydirective 指令的值是一个字面量的箭头函数,该函数并不会立即执行,因为表达式中只是函数的声明,并没有调用。利用这种形式,就可以为自定义指令绑定函数值,并可以向函数中传递参数。

方式二:利用动态参数

Vue 从 2.6.0 开始,可以用方括号括起来的 JavaScript 表达式作为一个指令的参数,如下

<a v-bind:[attributeName]="url"> ... </a>
<a v-on:[eventName]="doSomething"> ... </a>

利用动态参数,也可以向指令中传递其绑定的函数所需要的参数,如下

# template
<div v-mydirective:[funcArg]="handleFunc"><div>

# script
export default {
    directives: {
        mydirective: {
            bind(el, binding, vnode) {
                let {expression, arg} = binding;
                if (expression && vnode.context[expression]) {
                    vnode.context[expression](arg);
                } else {
                    binding.value(arg)
                }
            },
        }
    },
    data() {
        return {
            funcArg: {
                a: 1,
                b: 2,
                c: 3
            },
        }
    },
    methods: {
        handleFunc({a, b , c}) {
            console.log(a, b, c);
        },
    }
}

需要注意的是,利用动态参数时,handleFunc 只能接收一个参数,因为指令的参数只能传一个。

如果需要接收多个参数,可以像上例一样,传个对象进去,然后在处理函数中采用解构语法接收参数。

在自定义指令中的传递参数时value和expression的区别

在使用Vue的自定义指令的时候,有时候会在调用binding的value的值的时候会发现值显示未定义,但是我们确实传递了参数,在查看打印出来的参数的时候会发现参数出现在了expression对应的值中,而不是value,所以这时候这两个参数的区别就很有必要探究一下

首先做一个简单的案例来测试一下,在我们传递一个参数的时候,这两个参数的具体作用和现实的内容:

代码实现:

<template>
<div>
  <p v-color="color">你好世界</p>
</div>
</template>
 
<script>
export default {
  name: "Demo_d",
  directives:{
    color:{
      bind(el,binding){
        console.log(el)
        console.log(binding)
      }
    }
  },
  data(){
    return {
      color:'red'
    }
  }
}
</script>
 
<style scoped>
 
</style>

在上面的案例中,我们定义了一个自定义指令,指令的名字叫做color,并传递了一个参数,参数是Vue组件中的data节点中的变量,我们打印了两个形参,一个是挂载的对象,一个是用来接收参数的binding,下面我们来看看value和expression中对应的值是什么

显示效果:

可以看到在expression中的值是color,而在value中存储的值是red,那么我们就可以知道,expression中存储的是我们传递给指令的参数的原本的内容,是一个表达式,而value中的值才是我们真正需要的,这是在传递了一个变量的情况,那如果我们直接传递一个固定的值作为参数的时候是什么样的结果呢?

代码实现:

<template>
<div>
  <p v-color="red">你好世界</p>
</div>
</template>
 
<script>
export default {
  name: "Demo_d",
  directives:{
    color:{
      bind(el,binding){
        console.log(el)
        console.log(binding)
      }
    }
  },
  data(){
    return {
      color:'red'
    }
  }
}
</script>
 
<style scoped>
 
</style>

显示效果:

可以看到,在我们传递了一个data节点中不存在的值的时候,首先会报错,这个洋文报错的大致意思是作为参数传递的这个变量没有定义就被使用了,而且在组件中没有这个变量的其它形式的定义。

意思就是我们明明传递了一个值,但是Vue仍然将其作为一个表达式的形式来解析了,而且可以看到expression中的值是我们传递进去的参数的名字,而value中却没有参数,就导致了我们明明传递了参数而value中没有任何参数的问题,那么如果我们想要传递一个字面值,而不是作为表达式的形式被解析的时候需要怎么做呢?

很简单,当我们想要传递一个字面值,而希望Vue不要以表达式的形式去解析的时候,用单引号将值包裹起来就可以作为一个字符串的字面值的形式进行解析了。

代码实现:

<template>
<div>
  <p v-color="'red'">你好世界</p>
</div>
</template>
 
<script>
export default {
  name: "Demo_d",
  directives:{
    color:{
      bind(el,binding){
        console.log(el)
        console.log(binding)
      }
    }
  },
  data(){
    return {
      color:'red'
    }
  }
}
</script>
 
<style scoped>
 
</style>

显示效果:

可以看到,在我们将传递的值用单引号进行包含之后,报错消失了,并且expression中的值是我们传递进去的带有单引号的参数,在value中的参数是我们真正需要的字面值 

注意点

在传递参数的时候,如果不加单引号,Vue会将其以表达式的方式进行解析,会进行运算或在data节点中寻找变量的值,如果没有对应的变量值就会报错,且value中没有对应的数据。

如果想要将参数作为普通的字符串进行解析的时候,就需要将参数使用单引号进行包裹,就可以作为一个普通的字符串字面值进行解析

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。

--结束END--

本文标题: Vue在自定义指令绑定的处理函数中传递参数

本文链接: https://www.lsjlt.com/news/199284.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Vue在自定义指令绑定的处理函数中传递参数
    目录在自定义指令绑定的处理函数中传递参数需求背景方式一:包装函数方式二:利用动态参数在自定义指令中的传递参数时value和expression的区别注意点总结在自定义指令绑定的处理函...
    99+
    2023-03-10
    Vue自定义指令 Vue处理函数 Vue传递参数
  • Vue怎么在自定义指令绑定的处理函数中传递参数
    这篇文章主要介绍“Vue怎么在自定义指令绑定的处理函数中传递参数”,在日常操作中,相信很多人在Vue怎么在自定义指令绑定的处理函数中传递参数问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Vue怎么在自定义指令...
    99+
    2023-07-05
  • vue的自定义指令传参方式
    目录自定义指令传参指令环境传参方式自定义指令动态参数自定义指令传参 指令 在vue官网中,常用指令有v-model和v-bind,但是,如果我们需要对DOM元素进行底层操作,就需要用...
    99+
    2024-04-02
  • vue select change事件如何传递自定义参数
    目录select change事件传递自定义参数@change函数传自定义参数实例select change事件传递自定义参数 今天记录一个小问题,最近get到的一个方法,不太常用,...
    99+
    2024-04-02
  • SpringBoot中如何自定义参数绑定
    这篇文章给大家介绍SpringBoot中如何自定义参数绑定,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。自定义参数转换器自定义参数转换器实现Converter接口,如下:public class D...
    99+
    2023-06-19
  • vue自定义指令传参方式是什么
    这篇文章主要介绍“vue自定义指令传参方式是什么”,在日常操作中,相信很多人在vue自定义指令传参方式是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”vue自定义指令传参方式是什么”的疑惑有所帮助!接下来...
    99+
    2023-06-30
  • Vue实现带参数的自定义指令示例
    正文 自定义指令参考官方文档:vuejs.bootcss.com/guide/custo… <!DOCTYPE html> <html lang="...
    99+
    2023-01-11
    Vue 带参数自定义指令 Vue 参数指令 Vue 自定义指令
  • Java中参数传递类型的定义
    本篇内容介绍了“Java中参数传递类型的定义”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!首先看定义:值传递,是指方法接收的是调用者提供的值...
    99+
    2023-06-17
  • vue3+TS实现自定义指令长按触发绑定的函数
    目录编写自定义指令时遇到的几个难点1.自定义指令的类型2.在ts中使用setTimeout() 函数3.自定义指令的传参问题代码而然间看到一个在vue2中写的长按触发事件的自定义指定...
    99+
    2022-12-29
    vue3 ts自定义指令 vue3 ts自定义长按指令
  • 如何在 PHP 中自定义函数参数
    php 中自定义函数参数包括:参数类型提示:指定函数参数的预期类型,防止意外数据类型和运行时错误。默认值:为参数指定默认值,在未提供实际参数时使用。可选参数:可以使用方括号括起来定义,可...
    99+
    2024-04-26
    php 自定义函数参数
  • vue中的自定义指令clickOutside
    目录自定义指令clickOutside首先我们先看看vue官方的文档clickoutside 这个指令用在哪里呢?写法自定义指令clickoutside使用及扩展用法自定义指令cli...
    99+
    2024-04-02
  • Vue的指令中实现传递更多参数
    目录概要基本原理基于闭包的扩展方案实例和代码实现Main.js中将指令对应的插件全局化ImageLoad插件定义图片加载管理类的定义Vue 3.0的实现概要 我们在使用Vue的开发项...
    99+
    2024-04-02
  • 创建自定义 PHP 函数时如何处理参数?
    本文探讨了 php 函数参数处理技巧。类型限定:使用类型提示强制参数类型。默认参数值:为可选参数设置默认值。强制参数传递:使用 null 联合类型强制参数传递。可变数量参数:使用 ......
    99+
    2024-04-22
    php 参数处理
  • Oracle中数据绑定和参数传递要注意什么
    在Oracle中,数据绑定和参数传递是非常重要的操作,要注意以下几点: 数据绑定是在SQL语句中使用变量来替代固定的数值或字符串...
    99+
    2024-04-09
    Oracle
  • php中url自定义参数如何传
    在PHP中,URL参数可以通过添加到URL的查询字符串中来传递。查询字符串是URL中的问号后面的部分,它由键值对组成,每个键值对之间...
    99+
    2023-08-09
    php
  • Vue的指令中如何实现传递更多参数
    本篇内容主要讲解“Vue的指令中如何实现传递更多参数”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Vue的指令中如何实现传递更多参数”吧!基本原理本文介绍的指令扩展方法,主要以闭包为基础,并且使...
    99+
    2023-06-30
  • 巧用 Python 函数:从定义到调用,再到参数传递
    函数定义 Python 函数的定义使用 def 关键字,函数名后跟一对圆括号。圆括号中可以包含参数,参数之间用逗号分隔。函数体写在冒号后面,缩进表示函数体。 def greet(name): """ 向某人打招呼。 Arg...
    99+
    2024-02-06
    Python 函数 函数定义 函数调用 参数传递
  • Vue事件处理函数如何绑定
    这篇文章主要介绍“Vue事件处理函数如何绑定”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Vue事件处理函数如何绑定”文章能帮助大家解决问题。在 JS 中「事件」是不需要绑定的,浏览器自带了许多的事...
    99+
    2023-07-05
  • vue中自定义指令directive的详细指南
    目录一、 什么是自定义指令二、 如何自定义指令钩子函数三、应用场景输入框防抖图片懒加载一键 Copy的功能拖拽总结一、 什么是自定义指令 我们看到的v-开头的行内属性,都是指令,不...
    99+
    2024-04-02
  • PHP 函数调用中的参数传递指南
    php 函数调用中,参数传递包括按值传递、按引用传递和默认参数。按值传递复制变量值,按引用传递修改原始变量,默认参数提供预定义值。实战案例演示了按值传递计算税额、按引用传递交换变量和使用...
    99+
    2024-04-16
    php 参数传递
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作