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

目录

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

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

三、时间处理

获取当前年月日

时间自定义格式化 

时间脱敏处理,去掉秒 

四、input输入框处理

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

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

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

​编辑

​编辑

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

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

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

八、检测元素类型


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

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

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

本文关键字:bug、elementUi、vue

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

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

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

最终效果: 

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

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

 <el-checkbox-group v-if="caliberType&&caliberType.length" v-model="addMessage.feedbackMaterials"><el-checkboxv-for="(item, index) in caliberType":label="item.code":key="index">{{ item.name }}</el-checkbox></el-checkbox-group>

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

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

三、时间处理

获取当前年月日

    //获取当前时间,格式:yyyy-mm-dd hh:mm:ssgetNow() {var now = new Date(),y = now.getFullYear(),month = now.getMonth(),d = now.getDate(),h = now.getHours(),m = now.getMinutes(),s = now.getSeconds();return (y +"-" +(month + 1) +"-" +d +" " +(h > 9 ? h : "0" + h) +":" +(m > 9 ? m : "0" + m) +":" +(s > 9 ? s : "0" + s));},

时间自定义格式化 

//时间格式化
function timeFormat(time, fmStr = "yyyy-mm-dd hh:mm") {if (!time) return;time = new Date(time);const weekCN = "一二三四五六日";const weekEN = ["Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday",];let year = time.getFullYear();let month = time.getMonth() + 1;let day = time.getDate();let hours = time.getHours();let minutes = time.getMinutes();let seconds = time.getSeconds();let milliSeconds = time.getMilliseconds();let week = time.getDay();month = month >= 10 ? month : "0" + month;day = day >= 10 ? day : "0" + day;hours = hours >= 10 ? hours : "0" + hours;minutes = minutes >= 10 ? minutes : "0" + minutes;seconds = seconds >= 10 ? seconds : "0" + seconds;if (fmStr.indexOf("yyyy") !== -1) {fmStr = fmStr.replace("yyyy", year);} else {fmStr = fmStr.replace("yy", (year + "").slice(2));}fmStr = fmStr.replace("mm", month);fmStr = fmStr.replace("dd", day);fmStr = fmStr.replace("hh", hours);fmStr = fmStr.replace("mm", minutes);fmStr = fmStr.replace("ss", seconds);fmStr = fmStr.replace("SSS", milliSeconds);fmStr = fmStr.replace("W", weekCN[week - 1]);fmStr = fmStr.replace("ww", weekEN[week - 1]);fmStr = fmStr.replace("w", week);return fmStr;
}

时间脱敏处理,去掉秒 

 

readTime.substring(0, 16)

四、input输入框处理

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

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

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


<div ref='feedback'><textarea ref="inputRemark"style="  border: 1px solid #c0c4cc;"class="textareaBox textareaBox80"v-model="addMessage.remark"/></div>mounted里写:this.$refs.feedback.scrollIntoView();this.$refs.inputRemark.focus();

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

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

isInViewport(element) {const scrollTop = document.documentElement.scrollTop || document.body.scrollTop;const offsetTop = element.offsetTop;const windowHeight = window.innerHeight;const elementHeight = element.offsetHeight;return (offsetTop - scrollTop < windowHeight && offsetTop - scrollTop + elementHeight > 0);},

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

 

<template><div><van-sticky><van-nav-bar @click-left="() => $router.go(-1)"><template #left><van-icon name="arrow-left" /></template><template v-if="isShow" #title><spanv-if="detailInfo.flag || detailInfo.flag == 0":class="'color' + detailInfo.flag">【{{ typeObj[detailInfo.flag] }}】</span>{{ detailInfo.title }}</template></van-nav-bar></van-sticky><divclass="flex-box"style="overflow: hidden; padding: 0.25rem 0.25rem 0.5rem 0.25rem"><div v-show="!isShow" class="title"><spanv-if="detailInfo.flag || detailInfo.flag == 0":class="'color' + detailInfo.flag">【{{ typeObj[detailInfo.flag] }}】</span>{{ detailInfo.title }}</div><div ref="titleRef" style="height: 0.05rem"></div><div class="content">{{ detailInfo.content }}{{ detailInfo.content }}{{ detailInfo.content }}</div><div class="flex-end"><span>发布单位:{{ detailInfo.sendOrgName }}</span></div><div class="flex-end"><span>发布时间:{{ common.timeFormat(detailInfo.publishtime) }}</span></div></div></div>
</template>
<script>
import * as common from "@js/common";
import * as api from "@/request/api";
export default {name: "Notice",data() {return {isShow: false,typeObj: { 0: "普通", 1: "重要", 2: "紧急" },userInfo: common.getUserInfo(),common: common,noticeListLoading: false,detailInfo: [],};},created() {this.onLoadNotice();document.title = "消息通知";},mounted() {window.addEventListener("scroll", (e) => this.titleShow());},watch: {},methods: {isInViewport(element) {const scrollTop =document.documentElement.scrollTop || document.body.scrollTop;const offsetTop = element.offsetTop;const windowHeight = window.innerHeight;const elementHeight = element.offsetHeight;return (offsetTop - scrollTop < windowHeight &&offsetTop - scrollTop + elementHeight > 0);},titleShow() {const ele = this.$refs.titleRef;if (ele && this.isInViewport(ele)) {this.isShow = false;} else {this.isShow = true;}},async onLoadNotice() {const params = {id: this.$route.query.id,};this.detailInfo = (await api.getNoticeDetail(params)).data.data || {};this.noticeListLoading = false;},},beforeDestroy() {window.removeEventListener("scroll", (e) => this.titleShow());},
};
</script>
<style lang="less" scoped>
.font-set{font-size: 0.28rem;font-family: PingFang SC;color: #333333;line-height: 0.43rem;word-break: break-word;
}
.color0 {color: #02ba7d;
}
.color1 {color: gold;
}
.color2 {color: red;
}
.title {font-size: 0.34rem;font-family: PingFang SC;font-weight: 500;color: #333333;line-height: 0.48rem;margin-bottom: 0.2rem;word-break: break-word;
}
.content {text-indent: 2em;.font-set
}
.flex-end {display: flex;justify-content: flex-end;.font-set
}
</style>

七、关于富文本展示有很多可用的插件,但个人推荐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)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/133555.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

UE4 Niagara Module Script 初次使用笔记

这里可以创建一个Niagara模块脚本 创建出来长这样 点击号&#xff0c;输出staticmesh&#xff0c;点击它 这样就可以拿到对应的一些模型信息 这里的RandomnTriCoord是模型的坐标信息 根据坐标信息拿到位置信息 最后的Position也是通过Map Set的号&#xff0c;选择Particles的P…

达梦数据库表空间管理常用SQL

达梦数据库表空间管理常用SQL 表空间容量分析表空间创建与扩容 查看数据库状态&#xff1a; select name,instance_name,status$,mode$ from v$instance; --mode$显示Primary为主库select name,status$,role$ from v$database; --status$&#xff1a;1 启动&#xff0c;2 启动…

数据库实验:SQL的数据视图

目录 视图概述视图的概念视图的作用 实验目的实验内容实验要求实验过程 视图概述 视图是由数据库中的一个表或多个表导出的虚拟表&#xff0c;其作用是方便用户对数据的操作 视图的概念 视图是一个虚拟表&#xff0c;其内容由查询定义。同真实的表一样&#xff0c;视图包含一…

安科瑞出席2023湖南智能建筑电气高峰论坛-安科瑞 蒋静

10月27日&#xff0c;安科瑞电气股份有限公司受邀出席在湖南长沙召开的2023湖南智慧建筑电气高峰论坛。会议主题是“安全、健康、智慧、创新”&#xff0c;现场汇集湖南省设计院、施工单位、高等院校和企业代表等300余人参会。 湖南省建筑设计院集团股份有限公司机电院总工、正…

原文远知行COO张力加盟逐际动力 自动驾驶进入视觉时代?

11月7日&#xff0c;通用足式机器人公司逐际动力LimX Dynamics官宣了两位核心成员的加入。原文远知行COO张力出任逐际动力联合创始人兼COO&#xff0c;香港大学长聘副教授潘佳博士为逐际动力首席科学家。 根据介绍&#xff0c;两位核心成员的加入&#xff0c;证明一家以技术驱…

Flink SQL Regular Join 、Interval Join、Temporal Join、Lookup Join 详解

Flink ⽀持⾮常多的数据 Join ⽅式&#xff0c;主要包括以下三种&#xff1a; 动态表&#xff08;流&#xff09;与动态表&#xff08;流&#xff09;的 Join动态表&#xff08;流&#xff09;与外部维表&#xff08;⽐如 Redis&#xff09;的 Join动态表字段的列转⾏&#xf…

低代码开发,节约成本更好的选择

目录 低代码开发过程中是如何工作的&#xff1f; 低代码开发具备哪些功能&#xff1f; 具备的功能有&#xff1a; 01、高性能、高拓展 02、功能丰富&#xff0c;满足通用场景 03、私有化部署 04、代码生成器&#xff0c;下载代码进行二次开发 05、适配国产化&#xff0c;支持主…

黄金走势分析:美元反弹,金价已失守1980关口

昨晚美元和美债收益率反弹回升&#xff0c;现货黄金震荡下行&#xff0c;美市尾盘金价失守1980美元关口&#xff0c;最低至1977.22美元/盎司&#xff0c;最终收跌0.72%&#xff0c;报收1977.69美元/盎司。在汉声集团分析师张新才发稿前&#xff0c;今日&#xff08;周二&#x…

JavaSE 再续篇-面试题:this 与 super 关键字的区别

&#x1f525;博客主页&#xff1a; 小扳_-CSDN博客 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 this 与 super 关键字的区别 1.1 在Java中&#xff0c;this 关键字有以下作用 1.2 在Java中&#xff0c;super 关键字有以下作用 2.0 经典习题 1.0 this 与 su…

后台项目Gradle打包jar,不包含依赖jar并放到外部路径

# 1.Gradle打包jar # 2.依赖jar包外放到其他目录 # 3.保留引用关系 # 4.去掉引入的缓存build.gradle// 需要放到dependencies下面 // 傻逼问题 1 这个jar打包还得主动开 jar.enabled true // 1.清除上一次的lib目录 task clearJar(type: Delete) {delete "$buildDir\\lib…

从js和json中引入数据的区别

在前端开发中&#xff0c;你可以使用 JavaScript 来从 JSON 文件中引入数据。以下是一个基本的示例&#xff0c;演示如何从 JSON 文件中加载数据&#xff1a; 假设你有一个名为 data.json 的 JSON 文件&#xff0c;其中包含一些数据&#xff0c;如下所示&#xff1a; {"…

一种以RGB颜色登录的密码实现

当用户点击了某些密码之后&#xff0c;就可以登录成功&#xff0c;主要用于安全码&#xff0c;辅助安全手段。 颜色密码虽然不方便用键盘输入&#xff0c;只能用鼠标点击&#xff0c;但是容易记忆&#xff0c;也不容易被黑客攻陷。

Jmeter分布式测试的注意事项和常见问题

Jmeter是一款开源的性能测试工具&#xff0c;使用Jmeter进行分布式测试时&#xff0c;也需要注意一些细节和问题&#xff0c;否则可能会影响测试结果的准确性和可靠性。 Jmeter分布式测试时需要特别注意的几个方面 1. 参数化文件的位置和内容 如果使用csv文件进行参数化&…

工程(十四)——ubuntu20.04 PL-VINS

博主创建了一个科研互助群Q&#xff1a;772356582&#xff0c;欢迎大家加入讨论。这是一个科研互助群&#xff0c;主要围绕机器人&#xff0c;无人驾驶&#xff0c;无人机方面的感知定位&#xff0c;决策规划&#xff0c;以及论文发表经验&#xff0c;以方便大家很好很快的科研…

【SpringSecurity 】SpringSecurity 自定义登录页面

一、配置 package com.boot.config;import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.security.config.Customizer; import org.springframework.security.config.annotation.…

MySQL的备份恢复

数据备份的重要性 1.生产环境中&#xff0c;数据的安全至关重要 任何数据的丢失都会导致非常严重的后果。 2.数据为什么会丢失 &#xff1a;程序操作&#xff0c;运算错误&#xff0c;磁盘故障&#xff0c;不可预期的事件&#xff08;地震&#xff0c;海啸&#xff09;&#x…

21.6 Python 构建ARP中间人数据包

ARP中间人攻击&#xff08;ARP spoofing&#xff09;是一种利用本地网络的ARP协议漏洞进行欺骗的攻击方式&#xff0c;攻击者会向目标主机发送虚假ARP响应包&#xff0c;使得目标主机的ARP缓存中的IP地址和MAC地址映射关系被篡改&#xff0c;从而使得目标主机将网络流量发送到攻…

NLP之Bert实现文本多分类

文章目录 代码代码整体流程解读debug上面的代码 代码 from pypro.chapters03.demo03_数据获取与处理 import train_list, label_list, val_train_list, val_label_list import tensorflow as tf from transformers import TFBertForSequenceClassificationbert_model "b…

优维低代码实践:打包发布

导语 优维低代码技术专栏&#xff0c;是一个全新的、技术为主的专栏&#xff0c;由优维技术委员会成员执笔&#xff0c;基于优维7年低代码技术研发及运维成果&#xff0c;主要介绍低代码相关的技术原理及架构逻辑&#xff0c;目的是给广大运维人提供一个技术交流与学习的平台。…

【C++】开源:rapidjson数据解析库配置与使用

&#x1f60f;★,:.☆(&#xffe3;▽&#xffe3;)/$:.★ &#x1f60f; 这篇文章主要介绍rapidjson数据解析库配置与使用。 无专精则不能成&#xff0c;无涉猎则不能通。——梁启超 欢迎来到我的博客&#xff0c;一起学习&#xff0c;共同进步。 喜欢的朋友可以关注一下&…