首页 > 其他分享 >vue的自定义指令

vue的自定义指令

时间:2023-06-16 09:22:05浏览次数:39  
标签:el vue 自定义 color bind binding 指令

自定义指令

 

含义

vue官方提供了v-text,v-bind,v-for,v-model,v-if等常用指令,除此之外vue还允许开发者自定义指令。

自定义指令分为两类:

  • 私有自定义指令

  • 全局自定义指令

注意事项

  • 自定义指令使用时需要添加 v- 前缀

  • 指令名如果是多个单词,要使用 kebab-case 短横线命名方式,不要用 camelCase 驼峰命名

  • 自定义指令三个函数里的 this 指向 window

私有自定义指令

在每个vue组件中,可以在directives节点下声明私有自定义指令。

使用:v-自定义指令

<div class="footer-box" v-color> //v-color,v-是固定的写法。
 <slot name="footer" :user="list"></slot>
</div>
<script>
 directives: {
   color: {
     //当指令第一次被绑定到元素上的时候,会立即触发bind函数。
     //但是数据更新的话,bind函数不会再次触发。
     //为绑定到的HTML元素设置红色文字。
     bind(el) { //bind是绑定的意思。
       //形参中的el是固定写法,为原生的DOM对象,绑定了此指令。
       el.style.color = 'red'
    }
  }
}
</script>

 

binding

<template>
 <div class="app-container">
   <h1 v-color="color">App 根组件</h1>
   <!-- 直接写颜色需要在双引号中包裹单引号,否则会寻找名叫yellow的变量。 -->
   <p v-color="'yellow'">test</p>
   <!-- 点击按钮color的数据会改变,但是如上所述,数据更新bind函数不会再次触发,因此<h1>的颜色不会再次改变。 -->
   <button @click="color='green'">change App 根组件 color</button>
 </div>
</template>

<script>
// 1. 导入需要使用的 .vue 组件

import Article from '@/components/article.vue'
export default {
 data() {
   return {
     color:'blue'
  }
},
 components: {
   Article
},
 directives: {
       color: {
           bind(el,binding) {
               console.log(binding);
               el.style.color=binding.value
          }
      }
  }
}
</script>

 

binding的console.log

//console.log(binding)
{name: 'color', rawName: 'v-color', value: 'blue', expression: 'color', modifiers: {…}, …}
def: {bind: ƒ}
expression: "color" //<p>的是 "'violet'",有单引号,这个是表达式,不能拿来用。
 modifiers: {}
name: "color" //指令的名字
 rawName: "v-color" //用的名字
 value: "blue" //binding.value 为"blue",可以直接拿来用。
[[Prototype]]: Object

 

update函数

bind函数只调用一次,当指令第一次绑定到元素时调用,当DOM调用时bind函数不会被触发,update函数会在每次DOM更新时被调用。

<script>
 components: {
   Article
},
   directives: {
     color: {
       bind(el, binding) { // 第一次生效。
         console.log(binding);
         el.style.color = binding.value
      },
         update(el, binding) { // 之后每次更新生效。
           console.log(binding);
           el.style.color = binding.value
        }
    }
  }

 

函数简写形式

如果bind和update函数内的逻辑完全相同,则对象指令的自定义格式可以简写为函数格式。

<script>
 directives: {
   color(el,binding){
     el.style.color = binding.value
  }
}
</script>

 

全局自定义指令

全局共享的自定义指令需要通过vue.directive()在main.js中进行声明,示例代码如下。

Vue.directive('color',function (el,binding) {
 el.style.color=binding.value
})
 

标签:el,vue,自定义,color,bind,binding,指令
From: https://www.cnblogs.com/yxxcl51/p/17484743.html

相关文章

  • Vue项目入门实战(07)-想让你的Vue页面更炫酷?来学习样式绑定吧
    1class的对象绑定1.1需求现在要实现点击div区域里的helloworld文本时,文本变成红色。1.2实现<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><title>Vue中的样式绑定</title><scriptsrc="../vue.js&q......
  • Vue3 —— 商城项目
    create-vuecreate-vue是Vue官方新的脚手架工具,底层切换到了vite(下一代前端工具链),为开发提供极速响应。执行如下命令,这一指令将会安装并执行create-vuenpminitvue@latest无论您之前是否安装过create-vue,执行npminitvue@latest命令都会创建一个新的Vue项目。这个命令会......
  • C#Word开发,VSTO中自定义右键菜单,CommandBarButton的Click事件不触发,或者只触发一次
    C#Word开发,VSTO中自定义右键菜单,CommandBarButton的Click事件不触发,或者只触发一次_vsto右键快捷方式word_话与山鬼听的博客-CSDN博客 Word2016不会响应WindowBeforeRightClick事件的Bug问题 ......
  • vue时间处理
    vue时间处理https://blog.csdn.net/xc9711/article/details/123347629前言记录vue对时间的处理String与时间戳、时间互转计算时间差设置时间格式:YYYY-MM-DDHH:mm:ss年月日时分秒形式以及HH:mm:ss时分秒形式时间说明在此申明以下使用的时间相关的属性startTime:......
  • 博客园自定义样式修改标签页的icon图标
    步骤1:选择一张自己喜欢的图片,上传到https://www.logosc.cn/logo/favicon这个网站,将它转换成ico格式步骤2:进入博客园→文件界面,1.上传ico格式文件,2.点击这个文件步骤3:复制这一段url步骤4:进入博客园设置界面,将这段代码放入页眉<scripttype="text/javascript"language="jav......
  • Wazuh自定义decoder实例
     样本日志:IPS:Mar1017:12:34XX-Internet-IPS1-R03-25UIPS:SerialNum=23139121998GenTime="2023-03-1017:12:34"SrcIP=23.10.156.214SrcIP6=SrcIPVer=4DstIP=120.26.160.74DstIP6=DstIPVer=4Protocol=TCPSrcPort=65443DstPort=443InInterface=xge1......
  • Vue项目打包部署上线时devServer.proxy代理失效如何解决?使用nginx的proxy_pass 代理跨
    Vue项目打包部署上线时devServer.proxy代理失效如何解决?使用proxy_pass代理跨域转发前言本篇文章用于记录项目前端部署上线遇到的问题,包含对问题的思考、解决思路,以及从中获得的收获。正确的部署流程我也写了一篇文章,供大家参考使用宝塔将Vue2+Nodejs全栈项目打包部署到腾讯云服......
  • vue学习记录 4
    本地服务器配置apache安装学习参考网址:(官网下载apache包的时候可能会疯狂断开链接)教程里没说,但是要管理员身份操作cmd。https://blog.csdn.net/qqhruchen/article/details/127457889?spm=1001.2101.3001.6661.1&utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefaul......
  • qt——自己手动添加菜单栏、工具栏(自定义菜单栏、工具栏的位置)
    参考:原文链接 不一定非要用QGroupBox,其他继承自widget的控件都可以我的实现: ......
  • vue封装公共组件库并发布到npm库
    利用的原理:vue框架提供的api:Vue.use(plugin),我们把封装好组件的项目打包成vue库,并提供install方法,然后发布到npm中。Vue.use(plugin)的时候会自动执行插件中的install方法。 一、组件库代码目录调整1.根目录创建packages文件夹2.在packages文件夹中新增components文......