V3+ts如何使用自定义指令封装占位图片?

7 篇文章 0 订阅
3 篇文章 1 订阅

一、在<script setup lang="ts">中,局部注册自定义指令

具体步骤:

1.定义一个变量名,按照v开头的规则来定义,并且v后面的变量名首字母大写,eg:vImg

2.vue3和vue2自定义指令的方式不同,一个指令的定义对象有很多钩子函数可选,一般我们直接用mounted这个钩子函数

其他钩子函数及其参数的使用,可以直接参考vue3自定义指令官方文档:

自定义指令 | Vue.js  


 

3.el可以获取DOM元素上的属性,binding里面的value属性可以获取传过来的属性值

4.当图片加载错误时,调用el.onerror,将获取到的value值赋值给el上的src,就可以完成图片错误时的占位

实现代码: 

<script setup lang="ts">
// 局部自定义图片占位
const vImg = {
  mounted: (el: any, binding: { value: string }) => {
    console.log(el, 1111111)
    el.onerror = () => {
      el.src = binding.value
    }
  }
}
</script>

html结构: 

<img
  style="width: 80px; height: 80px"
  v-img="'https://fastly.jsdelivr.net/npm/@vant/assets/cat.jpeg'"
  :src="userList.avatar"
  alt=""
/>

 二、在main.ts全局注册自定义指令

具体步骤:

1.直接使用:app.directive('指令名',{})

2.和局部注册一样,在mounted钩子函数中写业务代码

实现代码: 

 // 全局自定义错误占位图
app.directive('errorImg', {
  mounted(el, binding) {
    console.log(el, 1111)
    console.log(binding, 222)
    el.onerror = () => {
      el.src = binding.value
    }
  }
})

html中使用:

<img
  style="width: 80px; height: 80px"
  v-errorImg="'https://fastly.jsdelivr.net/npm/@vant/assets/cat.jpeg'"
  :src="userList.avatar"
  alt=""
/>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值