VUE中如何实现指令按需导入

         众所周知,自定义指令在vue中有两种注册方式,一种是全局注册,一种是局部注册,我查阅了CSDN不少同道中人提出的方法,基本都是较为具体的操作,并没有说,针对存在多个自定义指令时,如何快捷高效的导入,全局注册是在入口文件main.js中进行导入,然后注册,但是在大型项目中main.js导入的文件与插件可能会有很多,这就意味着,存在多个自定义指令时main.js文件会显得十分杂乱无章,而局部注册的话,又会显得不太优雅。因此可以在src文件夹下,新建directive文件夹,准备index.js文件

                             

          在index.js文件中准备好自定义指令,并且导出,举个例子:

自定义图片不显示的指令
export const imgerror = {
  inserted(el, binding) { // el指的是 使用指令的dom元素  图片标签
    // console.log(el)
    // console.log(binding.value) // 是指令的值
    // 如果图片加载失败, 设置默认图像
    el.onerror = () => { // onerror是图片加载失败后出触发, 图片加载失败后 设置图像的默认值
      console.log('图片加载失败了')
      el.src = binding.value || 'https://img0.baidu.com/it/u=3306072466,501307884&fm=253&fmt=auto&app=138&f=PNG?w=500&h=500'
    }
  }
}
自定义元素背景的指令
export const bgc = {
  inserted(el) {
    el.style.background = 'pink'
  }
}

 然后在main.js中按需导入

// import '@/directives' // 直接导入并执行会将所有的组件注册
// 将directives中所有按需导出的指令批量全部注册
// import * as 变量名 from '路径'  接收到按需导出的文件的所有成员, 会被存储到一个对象中
import * as directives from '@/directives'
// for (const k in directives) { Vue.directive(k, directives[k]) }
// console.log(Object.keys(directives)) // ['bgc', 'imgerror']
Object.keys(directives).forEach(item => { Vue.directive(item, directives[item]) })

这样子既节约空间,也比较优雅

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
你可以使用`<input>`标签和`<label>`标签来实现这个功能。首先,你要在Vue3组件定义一个data属性来存储文件名,然后使用`<label>`标签来创建一个文件选择框,将其绑定到一个方法,该方法将更新data属性的值。接着,你要使用`<button>`标签来创建一个按钮,将其绑定到另一个方法,该方法将触发点击事件并更新data属性的值。最后,你可以使用`v-model`将data属性的值绑定到`<input>`标签上,以显示文件名。 以下是实现的代码示例: ``` <template> <div> <label for="file">选择文件:</label> <input type="file" id="file" ref="fileInput" style="display:none" @change="updateFileName"> <input type="text" v-model="fileName"> <button @click="selectFile">选择文件</button> </div> </template> <script> export default { data() { return { fileName: '' } }, methods: { selectFile() { this.$refs.fileInput.click() }, updateFileName(event) { this.fileName = event.target.files[0].name } } } </script> ``` 在上面的代码,`<label>`标签的`for`属性与`<input>`标签的`id`属性相同,以便将它们关联起来。`@change`指令将`updateFileName`方法绑定到文件选择框的`change`事件上,在该方法,我们更新data属性的值。`<button>`标签的`@click`指令将`selectFile`方法绑定到按钮的`click`事件上,在该方法,我们使用`this.$refs`获取到文件选择框的引用并模拟点击事件。最后,我们使用`v-model`指令将`fileName`绑定到`<input>`标签上,以显示文件名。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值