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

目录

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

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

三、时间处理

获取当前年月日

时间自定义格式化 

时间脱敏处理,去掉秒 

四、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的数据视图

目录 视图概述视图的概念视图的作用 实验目的实验内容实验要求实验过程 视图概述 视图是由数据库中的一个表或多个表导出的虚拟表&#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…

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

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

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

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

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;从而使得目标主机将网络流量发送到攻…

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

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

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

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

【亲测推荐】魔方财务和魔方云系统开源全解密

简介 资源入口点击进入 众所周知&#xff0c;魔方财务现在官方售价299&#xff0c;那么接下来就是带来开心版&#xff0c;详细手写实测安装教程已经放在付费资源中 展示 > 本文由博客一文多发平台 [OpenWrite](https://openwrite.cn?fromarticle_bottom) 发布&#xff01;

MySQL索引事务存储引擎

索引&#xff1a;是一个排序的列表 列表中存储的是索引的值和包含这个值数据所在行的物理地址 索引的作用 利用索引数据库可以快速定位 大大加快查询速度表的数据很大 或查询需要关联多个表 使用索引也可以查询速度加快表与表之间的连接速度使用分组和排序时可以大大减少时间提…

数据结构 - 全貌总结

目录 一. 前言 二. 分类 三. 常见的线性和非线性结构 一. 前言 数据结构是计算机存储、组织数据的方式。一种好的数据结构可以带来更高的运行或者存储效率。数据在内存中是呈线性排列的&#xff0c;但是我们可以使用指针等道具&#xff0c;构造出类似“树形”等复杂结构。 数…

java项目之宠物管理系统(ssm框架)

项目简介 宠物管理系统实现了以下功能&#xff1a; 管理员&#xff1a;首页、个人中心、宠物分类管理、商品分类管理、宠物用品管理、宠物商店管理、宠物领养管理、用户管理、宠物寄存管理、用户领养管理、宠物挂失管理、论坛管理、管理员管理、系统管理、订单管理。前台首页…

使用 Rust 进行程序

首先&#xff0c;我们需要安装必要的库。在终端中运行以下命令来安装 scraper 和 reqwest 库&#xff1a; rust cargo install scraper reqwest 然后&#xff0c;我们可以开始编写程序。以下是一个基本的爬虫程序&#xff0c;用于爬取 上的图片&#xff1a; rust use reqwe…

Pinia 是什么?Redux、Vuex、Pinia 的区别?

结论先行&#xff1a; Pinia 是 Vue 官方团队开发的一个全新状态管理库。与 Redux、Vuex 相同&#xff0c;核心都是解决组件间的通信和数据的共享问题。 Pinia 和 Vuex 类似&#xff0c;但使用起来更加简单和直观。因为 Pinia 基于 Vue3 的 Composition 组合式 API 风格&…