• 那些年遇到过的问题与解决方案


    目录

    一、当我们想进行数据回显并且只是让用户查看信息不能编辑时,置灰处理

    二、多选框初始化加载问题

    三、时间处理

    获取当前年月日

    时间自定义格式化 

    时间脱敏处理,去掉秒 

    四、input输入框处理

    input输入框设定为只能输入0与正整数

    刚进页面就定位到某处并输入框聚焦

    五、浏览器控制台——Network使用教学

    ​编辑

    ​编辑

    六、判断元素是否进入可视区域js方法

    使用演示:当进入可视区域标题全部展示,否则标题吸顶只展示一部分

    七、关于富文本展示有很多可用的插件,但个人推荐el-tiptap,结合elementUi比较实用

    八、检测元素类型


    写在前面,博主是个在北京打拼的码农,从事前端工作5年了,做过十多个大大小小不同类型的项目,最近心血来潮在这儿写点东西,欢迎大家多多指教。

    • 对于文章中出现的任何错误请大家批评指出,一定及时修改。
    • 有任何想要讨论和学习的问题可联系我:13287946835@139.com。
    • 发布文章的风格因专栏而异,均自成体系,不足之处请大家指正。

    那些年遇到过的问题与解决方案

    本文关键字:bug、elementUi、vue

    一、当我们想进行数据回显并且只是让用户查看信息不能编辑时,置灰处理

    当我们想进行数据回显并且只是让用户查看信息不能编辑时,通常会加上禁止选择属性(例如elementUi的disabled),现在我们不用一个个的写了,有时候回显的数据有很多,写着太麻烦了,要做很多无用功,我发现可以通过css做到区域置灰加禁止点击、选择。但要注意的是,记得置灰的时候取消掉选择框的clear操作(例如elementUi的el-select——clearable功能)。

    1. .gray-model {
    2. user-select: none;
    3. pointer-events: none;
    4. cursor: not-allowed;//不能点击的效果可有可无
    5. filter: grayscale(100%);
    6. -webkit-filter: grayscale(100%);
    7. }

    最终效果: 

    二、多选框初始化加载问题

    定义对象addMessage:{},从详情获取数据addMessage=res.data;  渲染add.feedbackMaterials,报错

    1.  if="caliberType&&caliberType.length" v-model="addMessage.feedbackMaterials">
    2.              
    3.                 v-for="(item, index) in caliberType"
    4.                 :label="item.code"
    5.                 :key="index"
    6.                 >{{ item.name }}
    7.               >
    8.             

    原因:model对象里的值不能是null
    v-model绑定的对象导致,初始化addMessage的时候没有在空对象里定义feedbackMaterials的值

    从接口获取详情信息后,可以这样处理一下

    三、时间处理

    获取当前年月日

    1. //获取当前时间,格式:yyyy-mm-dd hh:mm:ss
    2. getNow() {
    3. var now = new Date(),
    4. y = now.getFullYear(),
    5. month = now.getMonth(),
    6. d = now.getDate(),
    7. h = now.getHours(),
    8. m = now.getMinutes(),
    9. s = now.getSeconds();
    10. return (
    11. y +
    12. "-" +
    13. (month + 1) +
    14. "-" +
    15. d +
    16. " " +
    17. (h > 9 ? h : "0" + h) +
    18. ":" +
    19. (m > 9 ? m : "0" + m) +
    20. ":" +
    21. (s > 9 ? s : "0" + s)
    22. );
    23. },

    时间自定义格式化 

    1. //时间格式化
    2. function timeFormat(time, fmStr = "yyyy-mm-dd hh:mm") {
    3. if (!time) return;
    4. time = new Date(time);
    5. const weekCN = "一二三四五六日";
    6. const weekEN = [
    7. "Monday",
    8. "Tuesday",
    9. "Wednesday",
    10. "Thursday",
    11. "Friday",
    12. "Saturday",
    13. "Sunday",
    14. ];
    15. let year = time.getFullYear();
    16. let month = time.getMonth() + 1;
    17. let day = time.getDate();
    18. let hours = time.getHours();
    19. let minutes = time.getMinutes();
    20. let seconds = time.getSeconds();
    21. let milliSeconds = time.getMilliseconds();
    22. let week = time.getDay();
    23. month = month >= 10 ? month : "0" + month;
    24. day = day >= 10 ? day : "0" + day;
    25. hours = hours >= 10 ? hours : "0" + hours;
    26. minutes = minutes >= 10 ? minutes : "0" + minutes;
    27. seconds = seconds >= 10 ? seconds : "0" + seconds;
    28. if (fmStr.indexOf("yyyy") !== -1) {
    29. fmStr = fmStr.replace("yyyy", year);
    30. } else {
    31. fmStr = fmStr.replace("yy", (year + "").slice(2));
    32. }
    33. fmStr = fmStr.replace("mm", month);
    34. fmStr = fmStr.replace("dd", day);
    35. fmStr = fmStr.replace("hh", hours);
    36. fmStr = fmStr.replace("mm", minutes);
    37. fmStr = fmStr.replace("ss", seconds);
    38. fmStr = fmStr.replace("SSS", milliSeconds);
    39. fmStr = fmStr.replace("W", weekCN[week - 1]);
    40. fmStr = fmStr.replace("ww", weekEN[week - 1]);
    41. fmStr = fmStr.replace("w", week);
    42. return fmStr;
    43. }

    时间脱敏处理,去掉秒 

     

    readTime.substring(0, 16)

    四、input输入框处理

    input输入框设定为只能输入0与正整数

    1. type="number"
    2. oninput="value=value.replace(/^0+(\d)|[^\d]+/g,'')"
    3. class="inputBox50 inputBox"
    4. placeholder="填写反馈时限,单位小时,可为空"
    5. v-model="addMessage.feedbackDeadline"
    6. style="width: 60%; border: 1px solid #999;"
    7. />

    刚进页面就定位到某处并输入框聚焦

    1. 'feedback'>
    2.   <textarea ref="inputRemark"
    3.               style="  border: 1px solid #c0c4cc;"
    4.               class="textareaBox textareaBox80"
    5.               v-model="addMessage.remark"
    6.             />
  • mounted里写:
  • this.$refs.feedback.scrollIntoView();
  • this.$refs.inputRemark.focus();
  • 五、浏览器控制台——Network使用教学

    六、判断元素是否进入可视区域js方法

    1. isInViewport(element) {
    2. const scrollTop = document.documentElement.scrollTop || document.body.scrollTop;
    3. const offsetTop = element.offsetTop;
    4. const windowHeight = window.innerHeight;
    5. const elementHeight = element.offsetHeight;
    6. return (
    7. offsetTop - scrollTop < windowHeight && offsetTop - scrollTop + elementHeight > 0
    8. );
    9. },

    使用演示:当进入可视区域标题全部展示,否则标题吸顶只展示一部分

     

    七、关于富文本展示有很多可用的插件,但个人推荐el-tiptap,结合elementUi比较实用

    element-tiptap - npm

    js点击局部高亮——推荐driver.js

    GitHub - kamranahmedse/driver.js: A light-weight, no-dependency, vanilla JavaScript engine to drive the user's focus across the page

    八、检测元素类型

    检测元素是否是字符串

    var typeStr='';

    typeof  typeStr =='string'

    检测元素是否为对象

    typeStr.constructor===Object

    检测对象是否为空

    const obj ={};

    JSON.stringify(obj)=='{}'

    检测元素是否为数组

    Array.isArray(typeStr)

  • 相关阅读:
    【剑指Offer】16.数值的整数次方
    用结构化思维解一切BUG(3):实际案例
    __attribute__ 高级运用
    文献信息学
    Spring Boot 之Thymeleaf的爆红用注解【<!--/*@thymesVar id=“data“ type=“ch“*/-->】解决
    接口自动化测试实战
    JavaScript 的数据类型
    Python深度学习实战:Keras与高级多层感知器——用序列化保存模型
    【安全狗漏洞通告】Apache Spark 命令注入漏洞方案
    设计模式:策略模式
  • 原文地址:https://blog.csdn.net/aZHANGJIANZHENa/article/details/134074855