elementUI组件替换

2020已经最后一天了,都在说2020是不幸的一年,从年初到年尾,2020注定是不平静的一年。很快,我们就要对2020说再见了,原本想做个总结,结果发现也没什么好总结,2020没什么收获,最大的收获就是自己重新拾起了篮球。所以,在最后一天分享个知识点,elementUI组件替换。

最近一直在撸JQ的代码,一直在复制粘贴,把自己都给敲懵了。最近撸的代码确实是很枯燥,不过也挺佩服之前堆叠出来的这个项目,也觉得JQ是真的很不错,在操作dom这一块,是真的无敌。

最近产品提出了一个优化,element的dialog弹窗鼠标在内容层上面点击,滑动到外面的遮罩上的时候不关闭遮罩。在没有设置点击遮罩不弹出,chrome浏览器会关闭遮罩,Firefox不会,查了一下,只有几篇文章提到了这个问题,而且内容都一样,说是chrome的点击事件机制73+之后改了,解决办法就是改源码,然后打包编译替换node_modules。

说实在的,这个优化我一开始就觉得没有必要,自己怎么试都觉得是不需要这样的优化,然后产品他们说是用mac笔记本的很容易出现那样的行为。原谅我没用过mac笔记本,没办法,只好去优化了。然后就是修改源码打包编译替换node_modules的做法,我也不知道提出这样解决办法的是怎么想的,这种做法我也是很不赞同,就算是公司有私有库,或者自动发布去进行这一步的操作,我都觉得很麻烦。

最后我的解决办法也是改源码,只是是把elementUI的dialog源码拷出来,放到本地,然后替换。

下载elementUI的源码,然后把packages下的dialog文件夹整个拷贝出来,然后在引入element的地方引入dialog下的index.js。这边有一点要注意,如果是按需引入的,就是一个一个引入的,直接把从elementUI引入的Dialog去除就可以了,如果是全部引入的,不能修改Element.Dialog,我一开始直接修改这个发现没什么效果,然后看了源码,内部:

components.forEach(component => {  
    Vue.component(component.name, component);
});

所以Vue.use的时候内部是通过components去注入的,而且打包之后的引入是_webpack_require_引入,直接改Element.Dialog无效,要在注册之后重新注册替换:

Vue.use(Element, { size: “small” });

Vue.use(Dialog);

我还发现,官网的按需引入还遗漏了一些,Popconfirm和InfiniteScroll没注册。然后解决鼠标点击在内容上滑动到遮罩是自动关闭的方法就是新增这两个事件判断,去除click事件,这是直接拷贝别人的方法了,自己没有去写:

<div
      v-show="visible"
      class="el-dialog__wrapper"
      @mousedown="handleWrapperMousedown($event)"
      @mouseup="handleWrapperMouseup($event)"
    >
data() {
    return {
      closed: false,
      key: 0,
      mousedownClassBol: false,
    };
  },
handleWrapperMousedown(e) {
      this.mousedownClassBol = !!e.target.classList.contains(
        "el-dialog__wrapper"
      );
    },
    handleWrapperMouseup(e) {
      if (
        !!e.target.classList.contains("el-dialog__wrapper") &&
        this.mousedownClassBol
      ) {
        this.mousedownClassBol = false;
        this.handleWrapperClick();
      }
    },

其实也挺简单的,就是判断点击元素和鼠标离开元素是不是同一个。

这其实就是把element的源码拷贝出来当作自己的组件,算是比较好的一种解决方案。

最后,祝所有人元旦快乐!!!2021,我们一起进步!!!

Element UI 的走马灯组件(Carousel)默认提供了一些基本的箭头导航,如果想要自定义箭头或者替换箭头图标,你可以通过 CSS 或者 Vue 的模板编译来实现。这里是一个简单的步骤指南: 1. **CSS替换**: - 首先,找到 Carousel 组件中的箭头元素,它们通常会有类名如 `.el-carousel__nav button`。 - 使用样式覆盖,为这些类名添加新的背景图片或图标,并设置 `cursor: pointer` 使它们可点击。 ```css .el-carousel__nav button { background-image: url('path/to/your/custom-arrow-icon.png'); background-size: cover; cursor: pointer; } ``` 2. **Vue 自定义**: - 在组件中,你可以通过 `<template>` 部分修改箭头标签,比如使用 `<span>` 替换默认的按钮,并绑定 `v-on:click` 事件到你想执行的方法上。 ```html <template> <div class="carousel"> <!-- ... --> <button class="custom-left" @click="prevSlide"> prev arrow </button> <button class="custom-right" @click="nextSlide"> next arrow </button> <!-- ... --> </div> </template> ``` 然后在 `methods` 中定义 `prevSlide` 和 `nextSlide` 方法。 3. **事件绑定**: - 在 Vue 实例中,你需要确保这两个方法调用的是实际的滚动逻辑,而不是 Element UI 的内置方法。例如,如果你使用的是 Element UI 的 `carousel` 组件,那么可能需要这样操作: ```javascript methods: { prevSlide() { this.$refs.carousel.prev(); }, nextSlide() { this.$refs.carousel.next(); } } ``` 记得在实际使用时,检查Element UI的文档以获取确切的类名和API,因为版本可能会有所变化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值