vue老项目sass和element-ui开发踩坑

简介: 公司的一个各种依赖比较老的项目,习惯了之前的iview和stylus开发,刚接手还是有很多不习惯的地方

公司的一个各种依赖比较老的项目,习惯了之前的iview和stylus开发,刚接手还是有很多不习惯的地方。

项目部分依赖

  • element-ui:2.2.2
  • sass:1.26.1
  • sass-loader:7.3.1
  • webpack: 3.6.0
  • vue: 2.5.2
  • vue-router: 3.0.1
  • vuex: 3.0.1

sass

sass 之前用的 node-sass,替换成 sass(dart-sass)^1.56.1 版本后,深度选择器 ::v-deep 覆盖 element-ui 组件样式死活无效,降到 1.26.1 版本并且用 >>> 才生效了。

element-ui 2.2.2 版本的 el-input-number 数字输入框的 placeholder 无效,升级到 2.15.11会报错找不到这个文件:element-ui/lib/theme-chalk/index.css,去源码包里查看也确实没有 lib 这个文件夹,直接更新到截止2022年12月9日最新的 2.15.12版本就可以了。

注意用样式 content 去覆盖element-ui的官方组件图标,不同的版本的字体图标的 content 码是不一样的,比如覆盖下拉框右侧的箭头,不同版本要去看 el-icon-arrow-up 的实际content值。

sass(dart-sass)、sass-loader配置自动导入全局变量文件,sass-loader v8以下版本是 data,v8是prependData,最新的v10中是 additionalData。对应这个项目中要用:

{
   
  "sass": {
   
    "data": `@import "@/styles/var.scss";` // 引入全局变量
  }
}

Button

连续多个按钮组件 el-button,除了第一个会自动加上10px的左边距,如果不想要就得自己覆盖掉样式,或者中间加个占位标签阻止连续。

Form

form 表单校验的trigger要写成数组 trigger: ['blur', 'change'],不是之前的老写的 trigger:'blur|change',iview的也是一个数组。除了通过自定义的 validator 去自定义校验,如邮箱可以直接用type属性 type: 'email',还可以直接用pattern定义个正则去校验。

多选框如果用 el-checkbox-group 包起来,v-model 的值如果不是数组类型,组件在页面上会直接不显示。

覆盖选择框 el-select 右侧的箭头图标,升级element-ui 版本,图标的content值可能发生变化,可以放到全局的 var.scss 中定义一个变量去统一维护。

下拉选择框 el-select 多选默认会撑高输入框,可加上 collapse-tags 属性就会只显示一个,其他全部折叠起来,跟 iview 下拉框组件的 max-tag-coun 类似(iview这个更高级点,还可以自己设置最多显示的个数)。

async-validator 自定义校验的 validator 参数位置为 (rule, value, callback)。

数字输入框组件 el-input-number 有个默认值为0,设置为 null 还是会是0,只能设置成 undefined;和 iview 的 input-number 组件正好相反,iview 设置成 undefined 会显示成 1,要设置成 null 才能置空。

select 组件的搜索过滤 filterable,默认是根据 label 来匹配的,不指定 label 时会默认跟 value 一样,所以 el-option 记得要设置 label 属性

el-form 表单中 el-date-picker 日期时间选择器校验规则,不要改成 type: 'date',改成日期类型后如果不是直接选择的,比如直接赋值的日期时间字符串 2023-01-01 12:32:18,触发校验会报错 getTime is not a function

Form 表单校验不通过时,有滚动条自动跳转到错误的元素位置:el-form、el-collapse、el-dialog、el-table

submit () {
   
  this.$refs.form.validate(vali => {
   
    if (vali) {
   
      console.log('ok')
    } else {
   
      this.scrollToError()
    }
  })
}

scrollToError() {
   
  function scrollIntoView() {
   
    const elements = document.getElementsByClassName('is-error')
    if (elements && elements.length) {
   
      elements[0].scrollIntoView({
   
        block: 'center',
        behavior: 'smooth'
      })
    }
  }

  const tableErr = !(this.isCheck && !this.form.supplierId)
  // 如果折叠面板折叠了自动展开
  if (tableErr && this.active && !this.active.includes('2')) {
   
    this.active.push('2')
  }

  this.$nextTick(() => {
   
    // 表格里的表单有错误时表格自动滚动到最右边
    if (tableErr) {
   
      const table = this.$refs['el-table']
      const w = table.bodyWidth
      table.bodyWrapper.scrollLeft = Number(w.replace('px',''))

      // 滚动到表格中时,要先更新表格的滚动条
      this.$nextTick(() => {
   
        scrollIntoView()
      })
    } else {
   
      scrollIntoView()
    }
  })
}

el-input 直接加 v-model.trim 会导致输入框无法输入空格,这样字符串中间的空格也不能输入了,人家隔壁 iview 都是可以的

Menu

el-menu 菜单组件刷新或者跳转到其他菜单,不能自动展开和选中当前菜单项,加一个属性 :default-active="$route.path" 就可以解决了,iview 里要自己手动去调一下更新菜单的方法 this.$refs.menu.updateOpened()

Table

el-table 表格组件的 slot-scope 插槽中序号是 $index,iview 中才是 index

Dialog

弹窗组件 el-dialog 如果存在嵌套,子弹窗一定要加上 append-to-body,否则会造成层级不对被遮挡

日期时间选择组件 el-date-picker 禁选当前时间之前的时间

设置 picker-options 属性,disabledDate 禁选日期,selectableRange 设置可选时分秒

<template>
  <div>
    <el-date-picker
      v-model="form.date"
      type="datetime"
      :picker-options="pickerOptions"
      placeholder="请选择时间"
    >
   </el-date-picker>
</div>
</template>
<script>
export default {
  data() {
    return {
      form: {
        date: ''
      },
      pickerOptions: {
        disabledDate(date) {
          return date.getTime() < Date.now() - 8.64e7
        },
        // Mon Dec 19 2022 12:32:04 GMT+0800 (中国标准时间)
        selectableRange: `${Date().split(' ')[4]} - 23:59:59`
      },
    }
  },
}
</script>
相关文章
|
7月前
|
开发框架 前端开发 JavaScript
【HarmonyOS Next之旅】基于ArkTS开发(二) -> UI开发一
本文介绍了方舟开发框架(ArkUI)及其两种开发范式:基于ArkTS的声明式开发范式和类Web开发范式。ArkUI是用于构建HarmonyOS应用界面的UI框架,提供极简UI语法和基础设施。声明式开发范式使用ArkTS语言,以组件、动画和状态管理为核心,适合复杂团队协作;类Web开发范式采用HML、CSS、JavaScript三段式开发,适用于简单界面应用,贴近Web开发者习惯。文中还概述了两者的架构和基础能力,帮助开发者选择合适的范式进行高效开发。
225 15
|
7月前
|
编解码 前端开发 Java
【HarmonyOS Next之旅】基于ArkTS开发(二) -> UI开发三
本文介绍了基于声明式UI范式的图形绘制与动画效果实现方法,涵盖绘制图形、添加动画效果及常见组件说明三部分内容。在绘制图形部分,详细讲解了如何通过Circle组件为食物成分表添加圆形标签,以及使用Path组件结合SVG命令绘制自定义图形(如应用Logo)。动画效果部分则展示了如何利用animateTo实现闪屏动画,包括渐出、放大效果,并设置页面跳转;同时介绍了页面间共享元素转场动画的实现方式。最后,文章列举了声明式开发范式中的各类组件及其功能,帮助开发者快速上手构建复杂交互页面。
254 11
|
3月前
|
存储 开发者 容器
鸿蒙 HarmonyOS NEXT星河版APP应用开发-ArkTS面向对象及组件化UI开发使用实例
本文介绍了ArkTS语言中的Class类、泛型、接口、模块化、自定义组件及状态管理等核心概念,并结合代码示例讲解了对象属性、构造方法、继承、静态成员、访问修饰符等内容,同时涵盖了路由管理、生命周期和Stage模型等应用开发关键知识点。
305 1
鸿蒙 HarmonyOS NEXT星河版APP应用开发-ArkTS面向对象及组件化UI开发使用实例
|
6月前
|
JavaScript 前端开发 UED
【HarmonyOS Next之旅】基于ArkTS开发(二) -> UI开发四
本文介绍了Web组件开发与性能优化的相关内容。在Web组件开发部分,涵盖创建组件、设置样式与属性、添加事件和方法以及场景示例,如动态播放视频。性能提升方面,推荐使用数据懒加载、条件渲染替代显隐控制、Column/Row替代Flex、设置List组件宽高及调整cachedCount减少滑动白块等方法,以优化应用性能与用户体验。
252 56
|
6月前
|
编解码 UED 开发者
【HarmonyOS Next之旅】基于ArkTS开发(二) -> UI开发之常见布局
本文主要介绍了自适应布局与响应式布局的相关内容。自适应布局部分涵盖线性布局、层叠布局、弹性布局和网格布局,详细说明了各布局的特性及使用方法,例如线性布局中的排列、拉伸与缩放,弹性布局的方向、换行与对齐方式等。响应式布局则重点讲解了栅格系统和媒体查询,阐述如何通过栅格组件和媒体查询条件实现不同设备上的适配效果。这些技术帮助开发者灵活应对多尺寸屏幕的设计需求,提升用户体验。
338 55
|
7月前
|
存储 开发框架 API
【HarmonyOS Next之旅】基于ArkTS开发(二) -> UI开发二
本文详细介绍了基于声明式UI开发的健康饮食应用的设计与实现过程。内容涵盖从基础环境搭建到复杂功能实现的全流程,包括创建简单视图、构建布局(如Stack、Flex)、数据模型设计、列表与网格布局构建,以及页面跳转和数据传递等核心功能。 本文通过实际案例深入浅出地解析了声明式UI开发的关键技术和最佳实践,为开发者提供了宝贵的参考。
267 14
|
6月前
|
JavaScript 前端开发 开发者
09.HarmonyOS Next数据驱动UI开发:ForEach与动态渲染完全指南(上)
在现代前端开发中,数据驱动UI已成为主流开发范式。HarmonyOS Next的ArkTS语言和声明式UI框架完美支持这一理念,使开发者能够以更高效、更直观的方式构建复杂应用。
180 1
|
7月前
|
人工智能 安全 程序员
用 Colab 和 ngrok 免费部署你的 Web UI 项目,随时随地访问!
用 Colab 和 ngrok 免费部署你的 Web UI 项目,随时随地访问!
|
8月前
|
人工智能 物联网 编译器
【01】优雅草星云物联网AI智控系统从0开发鸿蒙端适配完成流程-初始化鸿蒙编译器deveco studio项目结构-UI设计图切片下载-优雅草卓伊凡
【01】优雅草星云物联网AI智控系统从0开发鸿蒙端适配完成流程-初始化鸿蒙编译器deveco studio项目结构-UI设计图切片下载-优雅草卓伊凡
240 11
【01】优雅草星云物联网AI智控系统从0开发鸿蒙端适配完成流程-初始化鸿蒙编译器deveco studio项目结构-UI设计图切片下载-优雅草卓伊凡
|
6月前
|
JavaScript 前端开发 UED
Vue 项目中如何自定义实用的进度条组件
本文介绍了如何使用Vue.js创建一个灵活多样的自定义进度条组件。该组件可接受进度段数据数组作为输入,动态渲染进度段,支持动画效果和内容展示。当进度超出总长时,超出部分将以红色填充。文章详细描述了组件的设计目标、实现步骤(包括props定义、宽度计算、模板渲染、动画处理及超出部分的显示),并提供了使用示例。通过此组件,开发者可根据项目需求灵活展示进度情况,优化用户体验。资源地址:[https://pan.quark.cn/s/35324205c62b](https://pan.quark.cn/s/35324205c62b)。
252 0