当前位置: 首页 > news >正文

项目中常用写法(前端)

项目中常用写法(前端)

  • vue
    • 等待某个方法执行结束后,在执行
    • 判断js是不是undefined类型
    • 父组件传值到子组件
    • state的值在标签中直接使用
    • 读取html,去掉字符串中的html标签
    • 字符串去掉中括号
    • 去掉双引号
    • 判断数组中是否包含某个值
    • 在某个ui框架上的:text写判断
    • 数组截取前几条数据
    • vue运行打包
    • vue打包之后放到nginx上运行
    • 获取时间不是两位数字补全2位
    • elementui 表格透明
    • element ui 的级联 选择后不收起弹窗
    • element ui 的级联 其他级别可选,最后一级不可选隐藏radio
    • 遍历求和
    • 绝对定位居中: 自身的一半
    • flex换行:
    • 清除定时器:
    • 格式化时间:
    • 保留两位小数:
    • 过滤对象中某些值等于固定的值:
    • 按照对象中的某个值进行排序:
    • 复制对象 生成新对象 ,aa值不发生改变:
    • 获取所有key值:
    • 两个对象比较删除掉不相同的属性:
    • 跳转页面传参,另一个页面接收:
    • 父组件校验子组件的表单:
    • 时间格式转化:
    • 子组件调用父组件方法:

vue

项目中常用的书写方式

等待某个方法执行结束后,在执行

this.getCurrentAjInfo().then((results) => { 
})

判断js是不是undefined类型

typeof (aa) !== 'undefined'

父组件传值到子组件

父组件在create中获取接口数据,取到的值放到父组件的data中,如下把data的值传递给子组件

<comHeader  :hbfonts="hbfonts"  />

子组件接受值

props: [ 'hbfonts'],

state的值在标签中直接使用

 <span id="headerspan" v-show="hbfonts==1" class="fd-header-icon-span-3">{{$store.state.session.showName}}</span>

读取html,去掉字符串中的html标签

str.replace(/<[^>]+>/g, '')

字符串去掉中括号

aa.replace(/\[|]/g,'')

去掉双引号

aa.replace(/\"/g, "");

判断数组中是否包含某个值

//存在,flag1==0 不存在:flag2==-1
let barginFlag=[1,2,3,4];
let flag1= barginFlag.findIndex(item => item=== a)

在某个ui框架上的:text写判断

<aa-menu v-for="(item, index) in aa"  :key="item.key" :code="item.key" :text="`<i class='fd-aa icon-${index%10} ${item.key}' style='margin-right: 10px'></i><span class='${(item.name === 'aa' && onshow)?'fontred':''}'>${item.name}</span> `+ `<i class='${(item.name === 'aa' && onshow)?'fd-aa icon-11':''}' style='margin-left: 10px;width: 11px;height:14px;'></i>`" @click="handleTriggerClick(item)"></aa-menu>

数组截取前几条数据

articleList.slice(0,1)

vue运行打包

cd .. 
npm run build

vue打包之后放到nginx上运行

修改nginx的conf下的nginx.conf文件,修改端口号,修改代理地址

server {listen       10022;server_name  localhost;
}location /aa/ {proxy_pass   http://192.168.33.44:8080;}

cmd命令查看端口号占用和杀掉占用进程:

>netstat -ano|findstr 10022>taskkill/f /pid 17680

获取时间不是两位数字补全2位

this.hours = `00${data.getHours()}`.slice(-2)+ ':' + `00${data.getMinutes()}`.slice(-2)

elementui 表格透明

/*最外层透明*//deep/ .el-table, /deep/ .el-table__expanded-cell{background-color: rgba(255,255,255,0.03);font-size: 14px;border: 0px;}/* 表格内背景颜色 *//deep/ .el-table th,/deep/ .el-table tr,/deep/ .el-table td {background-color: rgba(255,255,255,0.03);font-size: 14px;border: 1px solid rgba(255,255,255,0.16);}/deep/ .el-table tr,/deep/ .el-table td {color: #ffffff;}/deep/ .el-table th{color: #099cfe;}/deep/ .el-table tbody tr:hover > td {background-color: transparent !important;}/deep/ .el-table--enable-row-transition .el-table__body td,.el-table .cell {background-color: transparent;}

element ui 的级联 选择后不收起弹窗

<el-cascader @change="cascaderSelectChange" ref="cascaderRef"></el-cascader>cascaderSelectChange() {// 自动收到下拉框this.$refs.cascaderRef.dropDownVisible = false
},

element ui 的级联 其他级别可选,最后一级不可选隐藏radio

.selectCell .el-cascader-panel .el-cascader-menu:nth-child(3){.el-radio{display: none;}
}

遍历求和

var datas =[{ value: 188, name: '91-100分' },{ value: 120, name: '85-90分' },];
let total = datas.flat().reduce(function (preValue, n) {return preValue + n.value}, 0)

绝对定位居中: 自身的一半

transform: translate(-50%, -50%);

flex换行:

flex-wrap: wrap;

清除定时器:

window.clearTimeout(this.ds1);
clearInterval(this.timersd)

格式化时间:

$ npm install moment --save

在main.js中全局引入

import moment from "moment"
Vue.prototype.$moment = moment;
moment(new Date()).format('YYYY-MM-DD') >= moment(this.form.halfstart).format('YYYY-MM-DD')

保留两位小数:

parseFloat(0).toFixed(2),

过滤对象中某些值等于固定的值:

this.xwpjList = this.$store.getters.dictionaryList.filter(item => item.pcode === this.code);

按照对象中的某个值进行排序:

this.xwpjList.sort((a, b) => {return a.code-b.code
})

复制对象 生成新对象 ,aa值不发生改变:

let mtsjTemp = Object.assign({},this.aa,this.bb)

获取所有key值:

let keys = Object.keys(this.aa[0]);

两个对象比较删除掉不相同的属性:

Object.getOwnPropertyNames(mtsjTemp).filter((value)=>{if(keys.indexOf(value)==-1){delete mtsjTemp[value];} else if(['nc','nm','nz'].indexOf(value)!=-1){mtsjTemp[value] = this.timestampToTime(mtsjTemp[value]);}
});

跳转页面传参,另一个页面接收:

this.$router.push({name: '01FormView',params: {_id: this.rowid,button: 'update',stage: this.stage,rybs:this.rybs}
})
 if(this.$route.params.rybs == 0){res.jzjd = 0
}

父组件校验子组件的表单:

父组件

<xwpjForm :formCulumn="formCulumn" ref="pyRules" :formData="this.pyList" />
let pyFlag = this.$refs['pyRules'].validateForm(array);

子组件

<el-form :model="scope.row" ref="xwpjList" :rules="rules" class="demo-ruleForm" style="width:100%"><el-form-item :prop="items.disabled==true?items.prop:null" style="width:100%" v-if="!items.select"><el-input :autosize="{ minRows: 1, maxRows: 1}" type="textarea" :disabled="items.disabled ? scope.row[items.disabled] : true" style="width:100%;margin: 5px 0" v-model="scope.row[items.prop]"></el-input></el-form-item>
</el-form>
validateForm (array) {let flag = nulllet flagArray =[];for(var i=0;i<this.$refs['xwpjList'].length;i++){this.$refs['xwpjList'][i].validate(valid => {this.defaultSelect(array);if (valid && this.selectChooseOrNo) {flagArray.push('true')} else {flagArray.push('false')}})}if(flagArray.indexOf('false')>=0){flag = false;} else {flag = true;}return flag},

时间格式转化:

timestampToTime(timestamp) {if(timestamp == null || timestamp == ''){return "";}var date = new Date(timestamp);//时间戳为10位需*1000,时间戳为13位的话不需乘1000var Y = date.getFullYear() + '-';var M = (date.getMonth()+1 < 10 ? '0'+(date.getMonth()+1) : date.getMonth()+1) + '-';var D = date.getDate();return Y+M+D;},

子组件调用父组件方法:

子组件

<el-button  @click="formInsert(scope.$index, formData)" :disabled="chi.disabled ? scope.row[chi.disabled] : true" type="primary" plain >嘿嘿</el-button>
this.$emit('inrBtnClick', index, formData)

父组件

<p2023-formlist :formCulumn="formCulumn" ref="childRules" :formData="form.aa" @inrBtnClick="inrBtnClick"/>
inrBtnClick(index, rows){
// 内容        
},

相关文章:

项目中常用写法(前端)

项目中常用写法&#xff08;前端&#xff09;vue等待某个方法执行结束后&#xff0c;在执行判断js是不是undefined类型父组件传值到子组件state的值在标签中直接使用读取html&#xff0c;去掉字符串中的html标签字符串去掉中括号去掉双引号判断数组中是否包含某个值在某个ui框架…...

【面试】Java并发编程面试题

文章目录基础知识为什么要使用并发编程多线程应用场景并发编程有什么缺点并发编程三个必要因素是什么&#xff1f;在 Java 程序中怎么保证多线程的运行安全&#xff1f;并行和并发有什么区别&#xff1f;什么是多线程多线程的好处多线程的劣势&#xff1a;线程和进程区别什么是…...

HAProxy和Nginx搭建负载均衡器

负载均衡器是一个常用于分布式计算和网络应用中的系统组件&#xff0c;主要用于将客户端的请求分发到多个后端服务器上&#xff0c;以实现高可用性、高性能和可扩展性。常见的负载均衡器软件包括HAProxy和Nginx。 本文将介绍负载均衡器的原理和应用&#xff0c;以及使用HAProx…...

【集大成篇】数据类型( C、C++、Java )对比

1、C 语言数据类型关键字取值范围内存占用字符型char -128~1271整 型short-32768~327672int-2147483648~2147483647 (10位数&#xff09;4long (int)-2147483648~2147483647 (10位数&#xff09;4/8long long (int)-9223372036854775808~-9223372036854775807 (19位数&#xff…...

python编程:从键盘输入一个正整数n(n>2),请编程求解并输出大小最接近n的素数(n本身除外)

python编程实现&#xff1a;从键盘输入一个正整数n(n>2),请编程求解并输出大小最接近n的素数(n本身除外) 一、编程题目 从键盘输入一个正整数n(n>2)&#xff0c;请编程求解并输出大小最接近n的素数(n本身除外)。 (温馨提示&#xff0c;结果可能是2个哦) 二、输入输出样例…...

spring的面试宝典

1、什么是spring框架&#xff1f; spring是一个开放源代码的设计层面框架,它解决的是业务逻辑层和其他各层的松耦合问题,是一个分层的javaEE一站式轻量级开源框 架. 2.spring的作用? 方便解耦,简化开发&#xff0c;AOP编程支持&#xff0c;声明式事务支持&#xff0c;集成Juni…...

ArcGIS Pro地理空间数据处理完整工作流实训及python技术融合深度应用

查看原文>>>ArcGIS Pro地理空间数据处理完整工作流实训及python技术融合深度应用 目录 第一章、ArcGIS Pro基础讲解 第二章、数据获取、整合与管理 第三章、坐标系基础与地理配准 第四章、数据编辑与查询、拓扑检查 第五章、制图基础讲解 第六章、地理处理工具…...

(二)MyBatis源码阅读:SqlSession分析

一、核心流程 以下代码便是MyBatis的核心流程&#xff0c;我们从该代码出发分析MyBatis的源码。 Testpublic void test2() throws Exception{// 1.获取配置文件InputStream in Resources.getResourceAsStream("mybatis-config.xml");// 2.加载解析配置文件并获取Sq…...

小白学Pytorch系列-- torch.autograd API

小白学Pytorch系列-- torch.autograd API torch.Autograd提供了实现任意标量值函数的自动微分的类和函数。它只需要对现有代码进行最小的更改-你只需要声明张量s&#xff0c;它的梯度应该用requires gradTrue关键字计算。到目前为止&#xff0c;我们只支持浮点张量类型(half, f…...

【大数据基础】基于零售交易数据的Spark数据处理与分析

环境搭建 sudo apt-get install python3-pip pip3 install bottle数据预处理 首先&#xff0c;将数据集E_Commerce_Data.csv上传至hdfs上&#xff0c;命令如下&#xff1a; ./bin/hdfs dfs -put /home/hadoop/E_Commerce_Data.csv /user/hadoop接着&#xff0c;使用如下命令…...

【机器学习】P14 Tensorflow 使用指南 Dense Sequential Tensorflow 实现

Tensorflow 第一节&#xff1a;使用指南Tensorflow 安装神经网络一些基本概念隐藏层和输出层&#xff1a;神经元的输出公式Tensorflow 全连接层 Dense 与 顺序模型 SequentialDense LayerSequential Model代码实现一个神经网络实现方式一&#xff1a;手写神经网络* 实现方式二&…...

ubuntu18.04安装nvidia驱动,3种方式图文详解+卸载教程

教程目录一、关闭secure boot二、禁用nouveau驱动2.1 创建配置文件2.2 添加内容2.3 重启电脑2.4 输入命令验证三、安装显卡驱动3.1 软件和更新&#xff08;失败&#xff09;3.2 PPA源安装3.3 官网安装包安装四、卸载显卡驱动笔记本类型Ubuntu系统显卡版本联想拯救者Y7000win10U…...

多线程进阶学习11------CountDownLatch、CyclicBarrier、Semaphore详解

CountDownLatch ①. CountDownLatch主要有两个方法,当一个或多个线程调用await方法时,这些线程会阻塞 ②. 其它线程调用countDown方法会将计数器减1(调用countDown方法的线程不会阻塞) ③. 计数器的值变为0时,因await方法阻塞的线程会被唤醒,继续执行 public static void m…...

华为OD机试用java实现 -【RSA 加密算法】

最近更新的博客 华为od 2023 | 什么是华为od,od 薪资待遇,od机试题清单华为OD机试真题大全,用 Python 解华为机试题 | 机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南华为od机试,独家整理 已参加机试人员的实战技巧本篇题解:RSA 加密算法 题目 RSA 加密…...

技术宅小伙:大龄程序员就业,未来我们将何去何从?

程序员是一个高薪高压的职业&#xff0c;同时也是一个需要不断学习的职业。随着技术的不断更新换代&#xff0c;程序员需要不断地学习新的知识和技能&#xff0c;以适应市场的需求。然而&#xff0c;有些程序员可能会遭遇裁员&#xff0c;失去了稳定的收入来源。有些程序员可能…...

Spring Boot+Vue实现Socket通知推送

目录 Spring Boot端 第一步&#xff0c;引入依赖 第二步&#xff0c;创建WebSocket配置类 第三步&#xff0c;创建WebSocket服务 第四步&#xff0c;创建Controller进行发送测试 Vue端 第一步&#xff0c;创建连接工具类 第二步&#xff0c;建立连接 ​编辑 第三步&a…...

python---python介绍

python介绍 1.1介绍 1.1.1为什么学习 1.1.2什么是python 优雅简单易学1.1.3在线2进制转换 在线二进制转文本工具 - 转换 1.1.4python的安装和配置 1.需要配置对应的环境变量。可以设置多个。 默认全选 设置安装的路径 最后安装完成即可。 验证&#xff1a;python 如何退出 1.1.…...

第十四届蓝桥杯大赛——真题训练第10天

目录 第一题&#xff1a;扫雷 题目描述 输入描述 输出描述 输入输出样例 运行限制 题目代码 第 2 题&#xff1a;完全平方数 问题描述 输入格式 输出格式 样例输入 1 样例输出 1 样例输入 2 样例输出 2 题目分析 题目代码 第三题&#xff1a;求阶乘 问题描述…...

3.29~3.30学习总结

刷题情况&#xff1a; 蓝桥杯刷题&#xff1a; Java学习情况: 抽象类&#xff1a;如果将子类中抽取的共性行为&#xff08;方法&#xff09;&#xff0c;子类的执行不一样的时候 &#xff08;通俗一点来说&#xff0c;就是无法找到一个万能的方法体供子类使用&#xff0c;但这…...

结构体详解 ——— C语言

目录 1.结构体 结构体类型的声明 结构的自引用 结构体变量的定义和初始化 结构体内存对齐 结构体传参 结构体实现位段&#xff08;位段的填充&可移植性&#xff09; 位段的内存分配 1.结构体 结构体类型的声明 结构的自引用 结构体变量的定义和初始化 结构体内存对…...

PaddleX印章识别实战:5分钟搞定Seal-Recognition模型部署(附避坑指南)

PaddleX印章识别实战&#xff1a;从零部署到高效应用的完整指南 印章识别在合同审核、公文归档等场景中需求旺盛&#xff0c;但传统方案往往面临部署复杂、适配困难等问题。PaddleX推出的Seal-Recognition模型通过预训练产线低代码API的方式&#xff0c;让中小团队也能快速获得…...

intv_ai_mk11快速上手:浏览器输入URL→发送‘帮我写周报’→获得带数据亮点的Word格式草稿

intv_ai_mk11快速上手&#xff1a;浏览器输入URL→发送帮我写周报→获得带数据亮点的Word格式草稿 1. 什么是intv_ai_mk11 intv_ai_mk11是一款基于Llama架构的AI对话助手&#xff0c;拥有7B参数规模&#xff0c;运行在GPU服务器上。它能像真人助手一样理解你的需求&#xff0…...

AntimicroX完全指南:游戏手柄映射的艺术与科学

AntimicroX完全指南&#xff1a;游戏手柄映射的艺术与科学 【免费下载链接】antimicrox Graphical program used to map keyboard buttons and mouse controls to a gamepad. Useful for playing games with no gamepad support. 项目地址: https://gitcode.com/GitHub_Trend…...

音频合并避坑指南:为什么你的MP3拼接总有杂音?附FFmpeg解决方案

音频合并避坑指南&#xff1a;为什么你的MP3拼接总有杂音&#xff1f;附FFmpeg解决方案 当你尝试将多个MP3文件拼接成一个时&#xff0c;是否经常遇到以下问题&#xff1a;拼接处出现刺耳的杂音、音频卡顿或时间戳错乱&#xff1f;这并非你的操作失误&#xff0c;而是MP3格式本…...

神州数码无线网络(AC+AP)实战部署与优化指南

1. 神州数码ACAP无线网络部署前的规划准备 第一次接触神州数码无线网络方案时&#xff0c;我被它简洁的架构设计惊艳到了。AC&#xff08;无线控制器&#xff09;AP&#xff08;接入点&#xff09;的组网模式&#xff0c;特别适合500-2000平米的中型企业办公环境。但在真正动手…...

从智能门铃到工业质检:拆解5个嵌入式AI落地案例,看模型压缩和硬件选型怎么选

从智能门铃到工业质检&#xff1a;5个嵌入式AI实战案例与选型策略 智能门铃的摄像头突然捕捉到一张陌生面孔&#xff0c;300毫秒内完成本地人脸比对并推送到主人手机——这背后是嵌入式AI在消费电子领域的典型应用。当算法工程师面对瑞芯微RK3588和地平线旭日X3两颗芯片的选型表…...

STM32CubeIDE工程复制粘贴保姆级教程:告别重复配置,5分钟搞定新项目

STM32CubeIDE工程复制粘贴保姆级教程&#xff1a;告别重复配置&#xff0c;5分钟搞定新项目 每次启动新项目时&#xff0c;你是否还在重复那些繁琐的初始化步骤&#xff1f;从零开始配置时钟树、外设参数、中断优先级&#xff0c;不仅耗时费力&#xff0c;还容易出错。对于经验…...

AI辅助开发:让快马AI智能生成自适应Win10镜像下载管理工具

AI辅助开发&#xff1a;让快马AI智能生成自适应Win10镜像下载管理工具 最近在折腾一个Windows系统镜像下载管理工具&#xff0c;发现传统下载方式存在不少痛点&#xff1a;下载源选择困难、网络波动导致中断、版本特性不透明。正好接触到InsCode(快马)平台的AI辅助开发功能&am…...

深入浅出Livepatch:从kprobe到ftrace的Linux热补丁实现原理

深入浅出Livepatch&#xff1a;从kprobe到ftrace的Linux热补丁实现原理 当你的生产环境服务器正在处理每秒数万次请求时&#xff0c;突然发现一个关键内核漏洞需要立即修复&#xff0c;传统方式要求重启系统——这无异于在高速公路上急刹车。Livepatch技术应运而生&#xff0c;…...

手把手教你学<基于 Linux 的 NPU 协处理器固件开发>专栏第1章 入门:

1.2 典型 AI 芯片架构:主核 Linux + NPU 协处理器 在上一节我们明确了NPU是依附于Linux主核的专用AI协处理器,属于主从配合的工作模式,这一节我们就深入拆解端侧AI芯片最主流的“Linux主核+NPU协处理器”异构架构。结合大家日常接触的代码仓库管理、编译脚本执行、固件烧录…...