vue项目创建自定义指令处理img地址失效问题

Posted SpaceX7_s

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了vue项目创建自定义指令处理img地址失效问题相关的知识,希望对你有一定的参考价值。

在项目中遇见到一个这样的问题,图片来源私有云,后端可以返回了图片的src,但是src已经失效,所以图片不能显示,这个时候可以通过自定义指令解决,传入一个默认的图片来解决图片失效问题

自定义指令:

export const imgerror = 
  //inserted函数会在dom插入节点之后触发
  //dom表示使用自定义指令的元素
  //options是一个对象,value属性可以获取到自定义指令的绑定值
  //比如v-imgerror="num",value属性就表示num变量对应的值
  inserted(dom, options) 
    // 当图片有地址 但是地址没有加载成功的时候 会报错 会触发图片的一个事件 => onerror
    //当没有url图片地址的时候,不会触发onerror事件
    dom.src = dom.src || options.value;
    dom.onerror = () => 
      // 当图片出现异常的时候 会将指令配置的默认图片设置为该图片的内容
      // dom可以注册error事件
      dom.src = options.value;
    ;
  ,
  //inserted只会在组件初始化的时候执行,如果更换头像的时候不上传头像,那么inserted事件是不会执行
  //图片就不能显示默认的图片,我们添加componentUpdated函数
  //该函数会在当前指令作用的组件数据更新后执行
  
  componentUpdated(dom, options) 
    dom.src = dom.src || options.value;
  ,
;

接下来在全局注册该指令
1.在mian.js中引入

import * as directive from 'xxxx'

使用 * as xxx 的意思是,该js文件中的所有对象都会被包裹在一个对象中,该对象为directives

2.全局注册自定义执行,通过循环注册,就可以每次都书写重复代码可,如果后面还需要自定义指令,那么就往directives.js文件中添加即可

Object.keys(directives).forEach(key => 
  Vue.directive(key,directives[key])

)

在组件中使用该自定义指令

以上是关于vue项目创建自定义指令处理img地址失效问题的主要内容,如果未能解决你的问题,请参考以下文章

前端VUE项目中如何处理图片加载失效/裂开的问题

记录vue自定义权限指令v-permission的简单创建及使用

vue定义全局指令和局部指令

vue的移动app项目中,自定义拖拽指令的问题

Vue 自定义图片懒加载指令v-lazyload

vue项目中打包background背景路径问题