vue3中怎么注册全局的组件,全局注册组件,只需创建组件不需要引入。不需要每个组件都引入自动引入。全局自定义指令图片懒加载的代码。

1、我要 在 src 下 创建一个叫  library文件夹   里面再建一个  index.js文件  放入下面代码。

// context 函数会返回一个 导入函数 importFn
// 他有一个属性 keys() 获取所有的文件路径
// 通过文件路径数组,通过数组遍历,在使用 importFn 根据路径导入组件对象
// 遍历同时进行全局注册

// context (目标路径,是否加载子目录,加载文件的匹配正则)
const importFn = require.context('./', false, /\.vue$/)

// 注册全局组件 将来这样的组件建议在vue 插件中定义

export default {
    install(app) {
        //  把这个组件设置为全局指令     
        // console.dir(importFn.keys()) 文件名称数组
        importFn.keys().forEach((item) => {
            // 导入组件
            const component = importFn(item).default
            // 注册
            app.component(component.name, component)
        })

        defineDirective(app)
    }
}

// 导入加载失败是展示的图片   这个图片要引入否则会报错
import defaultIMG from '@/assets/images/200.jpeg'

// 定义指令
const defineDirective = (app) => {
    // 图片懒加载 v-lazyload 指令
    // 原理:先存储图片地址不能在src上,当图片进入可视区域,将你存储图片地址设置给图片元素即可
    app.directive('lazyload', {

        mounted(el, binding) {
            // 创建一个观察对象,来观察当前使用 指令的元素
            const observe = new IntersectionObserver(([{
                isIntersecting
            }]) => {
                if (isIntersecting) {
                    console.log('进入可视区');
                    // 停止观察
                    observe.unobserve(el)
                    // 把指令的值设置给el 的src属性 binding.value 就是指令值
                    el.src = binding.value
                    // 处理图片加载失败 onerror 是图片加载失败的事件
                    // load 图片加载成功
                    el.onerror = () => {
                        // 加载失败设置默认图片
                        el.src = defaultIMG
                    }
                }
            }, {
                threshold: 0.01
            })
            // 开启观察
            observe.observe(el)
        },
    })
}

2、我们在 main.js 文件中使用即可。

// 导入自己的ui组件库   然后 use()使用即可
import UI from '@/library/index.js'
createApp(App).use(store).use(router).use(UI).mount('#app')

3、我们写组件要写到 library 文件夹里面   一定要写 name  name是当前的文件夹名字

<template>
  <div class="box"></div>
</template>

<script>
export default {
  name: "myHeader",  // 一定要写 name  name当前的文件夹名字
   setup() {
    console.log(1);
  },
};
</script>

<style lang="scss" scoped>
.box {
  width: 400px;
  height: 400px;
  background-color: red;
}
</style>

 

 

 4、图片懒加载指令怎么用呢?

// 就是把之前 img 里面的 src 改为    v-lazyload="图片的路径" 就可以了
<img v-lazyload="v.picture" alt="" />

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
### 回答1: 代码引入组件,只需要在页面或者组件的json文件声明组件名即可,这样可以减少代码的冗余,提高开发效率。另外,使用easycom方式还可以实现组件,只有在需要使用组件时才会组件代码,优化页面的速度和性能。此外,使用easycom还可以更方便地进行组件的管理和维护,降低项目的复杂度和维护成本。 ### 回答2: 自定义组件使用easycom方式使用的优势是不需要再手动注册组件。 在传统的组件开发需要手动在App.vue或页面文件通过import的方式引入组件,并在components属性注册组件。每次使用组件时都需要进行这些繁琐的操作,增了开发的工作量和时间成本。 而使用easycom方式,只组件文件夹创建一个名为easycom.js的文件,并在其配置需要全局注册组件路径。之后在代码直接使用自定义组件,不需要再进行手动注册。easycom会自动根据配置的路径进行组件注册,实现自动化,简化了开发流程。 另外,easycom方式还具有以下优势: 1. 组件复用性高:easycom支持全局注册定义组件,可以在整个小程序项目直接使用,无重复引用和注册,提高了组件的复用性和开发效率。 2. 代码维护方便:使用easycom方式,组件注册和引用都集在easycom.js文件,便于统一管理和维护,减少了代码冗余和维护成本。 3. 代码可读性和可维护性提高:使用easycom方式,组件的引用和注册都在easycom.js配置,代码结构更清晰,易读性和可维护性都得到提升。 4. 提高开发效率:使用easycom方式,无手动注册组件,可以直接在代码使用自定义组件。这样节省了开发人员手动注册组件的时间,提高了开发效率。 综上所述,使用easycom方式使用自定义组件具有不需要在手动注册组件、提高组件复用性、简化代码维护、提高代码可读性和可维护性以及提高开发效率等优势。 ### 回答3: 自定义组件使用easycom方式使用的优势主要有以下几点: 1. 不需要在页面的json配置文件手动引入组件:传统的引入组件方式需要在页面的json配置文件手动引入组件路径,使用easycom方式可以省去这一步骤,直接在页面使用组件,减少了开发者的工作量。 2. 动态引入组件:使用easycom可以根据需要动态引入组件,而不需要在所有页面都显示地引入。这样,在页面需要使用该组件时才会相应的组件代码,提高了应用的运行效率和性能。 3. 组件的复用性更高:使用easycom方式可以更方便地在不同的小程序项目复用组件,只需要组件代码拷贝到新项目即可,无修改页面的引入配置和路径。这样可以大大提高组件的复用性和开发效率。 4. 降低了维护成本:使用easycom方式可以减少组件的管理和维护工作。传统的引入组件方式需要在每个页面的json配置文件进行维护,当组件变动时需要手动修改每个页面的配置文件。而使用easycom方式则只需要修改组件的逻辑代码,不需要关心引入配置,降低了维护成本。 综上所述,自定义组件使用easycom方式使用的优势主要体现在简化了引入配置、动态引入组件、提高了组件的复用性和降低了维护成本等方面,为小程序开发带来了更高的效率和便利性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

有两把刷子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值