自定义指令解决图片异常

简介: 自定义指令解决图片异常

通常情况下我们设置的图片都能正常显示,但是有时候会由于图片路径失效等情况导致图片加载失败,所以我们得为图片设置实现后默认显示的备用图片,这里可以使用自定义指令的方式解决


注册自定义指令方式


Vue.directive('指令名称', {
    // 会在当前指令作用的dom元素 插入之后执行
    // options 里面是指令的表达式
    inserted: function (dom,options) {
    }
})


在项目中我们可能会注册多个自定义指令,所以我们不可能挨个去给指令注册,这里可以使用模块化的方式统一注册与管理


src/directives/index.js中管理自定义指令


export const imagerror = {
  // 指令对象 会在当前的dom元素插入到节点之后执行
  inserted(dom, options) {
    // options是 指令中的变量的解释  其中有一个属性叫做 value
    // dom 表示当前指令作用的dom对象
    // dom认为此时就是图片
    // 当图片有地址 但是地址没有加载成功的时候 会报错 会触发图片的一个事件 => onerror
    dom.onerror = function() {
      // 当图片出现异常的时候 会将指令配置的默认图片设置为该图片的内容
      // dom可以注册error事件
      dom.src = options.value // 这里不能写死
    }
  }
}


main.js注册全局自定义指令


//  import *  as  变量  得到的是一个对象 { 变量1:对象1,变量2: 对象2 ...   }
import * as directives from '@/directives'
// 注册自定义指令
// Object.keys将对象属性转化为数组形式然后进行遍历
// 遍历所有的导出的指令对象 完成自定义全局注册
Object.keys(directives).forEach(key => {
  // 注册自定义指令
  Vue.directive(key, directives[key])
})


组件中使用自定义指令


<img v-imageerror="defaultImg" :src="Photo">


data() {
    return {
      defaultImg: require('@/assets/common/default.jpg')
    }
  },


自定义指令的钩子函数可以看官网


自定义指令地址

相关文章
|
JavaScript 小程序
小程序js控制图片属性隐藏
小程序js控制图片属性隐藏
41 0
|
4月前
|
JavaScript 前端开发 数据安全/隐私保护
【vue】自定义指令实现 复制、长按、水印 功能
【vue】自定义指令实现 复制、长按、水印 功能
335 0
|
6月前
|
前端开发 JavaScript 安全
如何给页面元素添加水印背景,在vue中怎么处理?
如何给页面元素添加水印背景,在vue中怎么处理?
332 1
|
6月前
|
JavaScript 安全 前端开发
错误处理:在Vue中捕获和处理异常
【4月更文挑战第24天】Vue.js开发中,错误和异常处理对于保持用户体验和应用稳定性至关重要。Vue提供`errorCaptured`钩子函数,可在组件及其子组件中捕获错误,通过参数进行处理。例如,在`App`组件中定义`errorCaptured`,调用自定义`handleError`方法记录错误。此外,可使用`try...catch`处理异步错误,全局错误处理则可通过`Vue.config.errorHandler`设置。结合这些机制,开发者能有效管理错误,提升应用的稳定性和易维护性。
341 7
|
JavaScript
vue(3) 出现了不能读的属性定义的报错但可以渲染如何解决
vue(3) 出现了不能读的属性定义的报错但可以渲染如何解决
182 0
|
存储 JavaScript API
Vue3实现图片懒加载及自定义懒加载指令
Vue3实现图片懒加载及自定义懒加载指令
637 0
|
6月前
|
JavaScript 数据可视化 容器
easyv平台_过滤器强制修改dom(暴力自定义组件渲染样式)
easyv平台_过滤器强制修改dom(暴力自定义组件渲染样式)
34 0
|
6月前
|
JavaScript
在Vue中,如何在组件内部使用try/catch块来处理错误?
在Vue中,如何在组件内部使用try/catch块来处理错误?
518 2
|
6月前
|
JavaScript
原生js实现for循环占位符绑定数据,类似模拟vue循环渲染数据
原生js实现for循环占位符绑定数据,类似模拟vue循环渲染数据
|
11月前
|
JavaScript
vue模板语法上集->插值,指令,过滤器,计算属性&监听属性,vue购物车
vue模板语法上集->插值,指令,过滤器,计算属性&监听属性,vue购物车
43 0