鸿蒙NEXT开发案例:颜文字搜索器
【引言】
本文将介绍一个名为“颜文字搜索器”的开发案例,该应用是基于鸿蒙NEXT平台构建的,旨在帮助用户快速查找和使用各种风格的表情符号。通过本案例的学习,读者可以了解如何在鸿蒙平台上进行数据处理、UI设计以及交互逻辑的实现。
【环境准备】
• 操作系统:Windows 10
• 开发工具:DevEco Studio NEXT Beta1 Build Version: 5.0.3.806
• 目标设备:华为Mate60 Pro
• 开发语言:ArkTS
• 框架:ArkUI
• API版本:API 12
【开发思路】
1. 数据模型设计
为了表示单个表情符号的信息,我们定义了一个 EmoticonBean 类,它包含了表情符号的风格(style)、类型(type)、表情符号本身(emoticon)及其含义(meaning)。此外,还添加了一个布尔属性 isShown 来追踪表情符号是否应该显示给用户,这有助于在搜索时动态更新列表。
2. UI 组件与布局
应用的主界面由一个 Index 组件构成,它负责整体布局的设计。界面上部是一个搜索框,允许用户输入关键词来过滤表情符号列表。下方则以表格形式展示了所有符合条件的表情符号,每一行包括四个部分:风格、类型、表情符号和含义。为了提升用户体验,当用户点击某个表情符号或其含义中的高亮文本时,会触发相应的点击事件,并输出日志信息。
3. 数据加载与处理
表情符号的数据来源于一个本地 JSON 文件 (emoticons.json),该文件在组件初次渲染之前被读取并解析为 EmoticonBean 对象数组。每次用户修改搜索框中的内容时,都会调用 splitAndHighlight 方法对每个表情符号的含义进行分割,并检查是否存在匹配的关键字。如果存在,则设置 isShown 属性为 true,否则为 false,以此控制表情符号是否在界面上显示。
4. 搜索与高亮
splitAndHighlight 函数用于将表情符号的含义按关键字分割成多个片段,并返回这些片段组成的数组。对于包含关键字的片段,会在界面上以不同的颜色高亮显示,从而直观地指出匹配的部分。此外,此函数还会根据是否有匹配项来决定表情符号是否可见,确保只有相关的表情符号才会展示给用户。
5. 用户交互
为了让用户有更好的操作体验,我们在界面上实现了触摸事件监听,当用户点击非输入区域时,自动关闭键盘。这样既保证了界面整洁,又简化了用户的操作流程。
【完整代码】
数据源:src/main/resources/rawfile/emoticons.json
https://download.csdn.net/download/zhongcongxu01/90126325
代码
// 引入必要的工具库 util 用于文本解码等操作
import { util } from '@kit.ArkTS'
// 引入 BusinessError 类用于处理业务逻辑错误
import { BusinessError } from '@kit.BasicServicesKit'
// 引入 inputMethod 模块用于管理输入法行为
import { inputMethod } from '@kit.IMEKit'// 定义一个可以被观察的数据模型 EmoticonBean 表示单个表情符号的信息
@ObservedV2
class EmoticonBean {// 定义风格属性,并初始化为空字符串style: string = ""// 定义类型属性,并初始化为空字符串type: string = ""// 定义表情符号本身,并初始化为空字符串emoticon: string = ""// 定义含义属性,并初始化为空字符串meaning: string = ""// 构造函数,允许在创建对象时设置上述属性constructor(style: string, type: string, emoticon: string, meaning: string) {this.style = stylethis.type = typethis.emoticon = emoticonthis.meaning = meaning}// 定义是否显示的表情符号状态标记,默认为 true,使用 @Trace 装饰器使其可追踪变化@Trace isShown: boolean = true
}// 使用 @Entry 和 @Component 装饰器定义 Index 组件作为应用入口
@Entry
@Component
struct Index {// 定义一个状态变量 textInput 用于存储搜索框中的文本内容,默认为空字符串@State private textInput: string = ''// 定义一个状态变量 emoticonList 用于存储表情符号列表,默认为空数组@State private emoticonList: EmoticonBean[] = []// 定义线条颜色属性private lineColor: string = "#e6e6e6"// 定义标题背景色属性private titleBackground: string = "#f8f8f8"// 定义文本颜色属性private textColor: string = "#333333"// 定义基础填充大小private basePadding: number = 4// 定义线条宽度private lineWidth: number = 2// 定义单元格高度private cellHeight: number = 50// 定义列权重比例private weightRatio: number[] = [1, 1, 5, 4]// 定义基础字体大小private baseFontSize: number = 14// 定义一个方法 splitAndHighlight 用于分割并高亮表情符号含义中的关键词private splitAndHighlight(item: EmoticonBean, keyword: string): string[] {let text = item.meaning // 获取表情符号的含义文本if (!keyword) { // 如果没有关键词,则直接返回整个文本,并显示该表情符号item.isShown = truereturn [text]}let segments: string[] = []; // 用于存储分割后的文本片段let lastMatchEnd: number = 0; // 记录上一次匹配结束的位置while (true) { // 循环查找关键词在文本中的位置const matchIndex = text.indexOf(keyword, lastMatchEnd); // 查找关键词出现的位置if (matchIndex === -1) { // 如果找不到关键词,将剩余文本加入到segments中并退出循环segments.push(text.slice(lastMatchEnd));break;} else { // 如果找到关键词,将非关键词部分和关键词部分分别加入到segments中segments.push(text.slice(lastMatchEnd, matchIndex)); // 非关键词部分segments.push(text.slice(matchIndex, matchIndex + keyword.length)); // 关键词部分lastMatchEnd = matchIndex + keyword.length;}}// 如果有关键词出现,则设置表情符号为显示状态item.isShown = (segments.indexOf(keyword) != -1)return segments;}// 当组件即将出现在屏幕上时调用此方法,用于加载表情符号数据aboutToAppear() {// 从资源管理器中读取本地文件 emoticons.json 的内容getContext().resourceManager.getRawFileContent("emoticons.json", (err: BusinessError, data) => {if (err) { // 如果读取失败,打印错误信息console.error('getRawFileContent error: ' + JSON.stringify(err))return}// 创建一个文本解码器来将二进制数据转换为字符串let textDecoder = util.TextDecoder.create('utf-8', { ignoreBOM: true })let jsonString = textDecoder.decodeToString(data, { stream: false })let jsonObjectArray: object[] = JSON.parse(jsonString) // 将 JSON 字符串解析为对象数组for (let i = 0; i < jsonObjectArray.length; i++) { // 遍历对象数组,填充 emoticonListlet item = jsonObjectArray[i]this.emoticonList.push(new EmoticonBean(item['s'], item['t'], item['e'], item['m']))}try {// 打印 emoticonList 到控制台以供调试console.info(`this.emoticonList:${JSON.stringify(this.emoticonList, null, '\u00a0\u00a0')}`)} catch (err) {console.error('parse error: ' + JSON.stringify(err))}})}// 定义 build 方法构建组件的UI结构build() {Column({ space: 0 }) { // 创建一个列容器,内部元素之间没有间距// 搜索框组件,绑定到 textInput 状态变量Search({ value: $$this.textInput }).margin(this.basePadding) // 设置外边距.fontFeature("\"ss01\" on") // 设置字体特征// 创建一个列容器用于表头Column() {Row() { // 创建一行用于放置表头// 表头文字:风格Text('风格').height('100%') // 设置高度为父容器的100%.layoutWeight(this.weightRatio[0]) // 根据权重分配宽度.textAlign(TextAlign.Center) // 文本居中对齐.fontSize(this.baseFontSize) // 设置字体大小.fontWeight(600) // 设置字体粗细.fontColor(this.textColor) // 设置文本颜色// 分割线Line().height('100%').width(this.lineWidth).backgroundColor(this.lineColor)// 表头文字:类型Text('类型').height('100%').layoutWeight(this.weightRatio[1]).textAlign(TextAlign.Center).fontSize(this.baseFontSize).fontWeight(600).fontColor(this.textColor)// 分割线Line().height('100%').width(this.lineWidth).backgroundColor(this.lineColor)// 表头文字:表情Text('表情').height('100%').layoutWeight(this.weightRatio[2]).textAlign(TextAlign.Center).fontSize(this.baseFontSize).fontWeight(600).fontColor(this.textColor)// 分割线Line().height('100%').width(this.lineWidth).backgroundColor(this.lineColor)// 表头文字:含义Text('含义').height('100%').layoutWeight(this.weightRatio[3]).textAlign(TextAlign.Center).fontSize(this.baseFontSize).fontWeight(600).fontColor(this.textColor)}.height(this.cellHeight).borderWidth(this.lineWidth).borderColor(this.lineColor).backgroundColor(this.titleBackground) // 设置背景颜色}.width(`100%`).padding({ left: this.basePadding, right: this.basePadding })// 创建一个滚动容器 Scroll 包含表情符号列表Scroll() {Column() {// ForEach 循环遍历 emoticonList 数组,创建每一行代表一个表情符号条目ForEach(this.emoticonList, (item: EmoticonBean) => {Row() {// 显示表情符号的风格Text(item.style).height('100%').layoutWeight(this.weightRatio[0]).textAlign(TextAlign.Center).fontSize(this.baseFontSize).fontColor(this.textColor)// 分割线Line().height('100%').width(this.lineWidth).backgroundColor(this.lineColor)// 显示表情符号的类型Text(item.type).height('100%').layoutWeight(this.weightRatio[1]).textAlign(TextAlign.Center).fontSize(this.baseFontSize).fontColor(this.textColor)// 分割线Line().height('100%').width(this.lineWidth).backgroundColor(this.lineColor)// 显示表情符号Text(item.emoticon).height('100%').layoutWeight(this.weightRatio[2]).textAlign(TextAlign.Center).fontSize(this.baseFontSize).fontColor(this.textColor).copyOption(CopyOptions.LocalDevice) // 允许复制到剪贴板// 分割线Line().height('100%').width(this.lineWidth).backgroundColor(this.lineColor)// 显示表情符号的含义,支持关键字高亮Text() {ForEach(this.splitAndHighlight(item, this.textInput), (segment: string, index: number) => {ContainerSpan() {Span(segment).fontColor(segment === this.textInput ? Color.White : Color.Black) // 根据是否是关键词设置字体颜色.onClick(() => { // 设置点击事件监听器console.info(`Highlighted text clicked: ${segment}`); // 打印点击的文本信息console.info(`Click index: ${index}`); // 打印点击的索引信息});}.textBackgroundStyle({color: segment === this.textInput ? Color.Red : Color.Transparent // 根据是否是关键词设置背景颜色});});}.height('100%').layoutWeight(this.weightRatio[3]).textAlign(TextAlign.Center).fontSize(this.baseFontSize).fontColor(this.textColor).padding({ left: this.basePadding, right: this.basePadding })}.height(this.cellHeight).borderWidth({ left: this.lineWidth, right: this.lineWidth, bottom: this.lineWidth }).borderColor(this.lineColor)// 根据表情符号的状态(是否显示)来决定其可见性.visibility(item.isShown ? Visibility.Visible : Visibility.None)})}.width(`100%`).padding({ left: this.basePadding, right: this.basePadding })}.width('100%').layoutWeight(1).align(Alignment.Top)// 触摸事件处理,当用户点击空白区域时,关闭键盘输入.onTouch((event) => {if (event.type == TouchType.Down) { // 如果是按下事件inputMethod.getController().stopInputSession() // 停止当前的输入会话}})}.width('100%').height('100%').backgroundColor(Color.White); // 设置容器的宽高和背景颜色}
}
相关文章:
鸿蒙NEXT开发案例:颜文字搜索器
【引言】 本文将介绍一个名为“颜文字搜索器”的开发案例,该应用是基于鸿蒙NEXT平台构建的,旨在帮助用户快速查找和使用各种风格的表情符号。通过本案例的学习,读者可以了解如何在鸿蒙平台上进行数据处理、UI设计以及交互逻辑的实现。 【环…...
python在纯文本程序里面藏一张图
思路base64编码是纯文本的,base64是以字符串的形式存在,包括但不限于python,js,C#,C/Cpp. 这里给出python示例:运行后可以显示一张opencv的官方例程图. 废话不说,上程序. import os,sys,time,cv2,base64,requests from PIL import Image from io import BytesIO import nump…...
Java 身份证校验工具类(15位校验、18位校验与15转18)
文章目录 身份证简介(一)身份证号码的组成(二)一代和二代身份证一代身份证二代身份证 检验思路分析(一)15位身份证号码(二)18位身份证号码(三)校验算法示例&a…...
The Past, Present and Future of Apache Flink
摘要:本文整理自阿里云开源大数据负责人王峰(莫问)在 Flink Forward Asia 2024上海站主论坛开场的分享,今年正值Flink开源项目诞生的第10周年,借此时机,王峰回顾了Flink在过去10年的发展历程以及 Flink社区…...
不能通过 ip 直接访问 共享盘 解决方法
from base_config.config import OpenSMB, SMB import os, time, calendar, requests, decimal, platform, fs.smbfsinfo_dict SMB.EPDI_dict info_dict[host] (FS03,10.6.12.182) info_dict[direct_tcp] True# smb OpenSMB(info_dict)print(ok)# 根据 ip 查询电脑名 impor…...
IDEA方法注释模板设置
目录 创建模板 新建模板:命名为* 设置模板内容-IDEA格式模板 设置模板应用场景 设置参数 创建模板 /**Enter这里我们也按照这种习惯来设置IDEA的方法注释:File-->Settings-->Editor-->Live Templates 先新建模板组,然后在模板组中…...
组件缓存keep-alive
希望点击面经详情回来之后该1面经详情停留在滚动条停止的位置 有些 组件是不需要缓存的,例如详情页不需要缓存。解决方法是keep-alive的三个属性 include:组件名数组,只有匹配的组件会被缓存exclude:组件名数组,任何匹配的组件都不会被缓存ma…...
【经验分享】搭建本地训练环境知识点及方法
最近忙于备考没关注,有次点进某小黄鱼发现首页出现了我的笔记还被人收费了 虽然我也卖了一些资源,但我以交流、交换为主,笔记都是免费给别人看的 由于当时刚刚接触写的并不成熟,为了避免更多人花没必要的钱,所以决定公…...
Ant Design of Vue之带select控件,单元格编辑功能的表格EditableCell组件
效果图 功能 表格里面某一行或者某一个单元格支持select复选框可以编辑,新增一行数据,删除一行数据,并且有校验规则 源码 editablecell组件源码 参考自 源码...
etcd节点扩/缩容
etcd集群节点数越多越好吗? etcd 集群是一个 Raft Group,没有 shared。所以它的极限有两部分,一是单机的容量限制,内存和磁盘;二是网络开销,每次 Raft 操作需要所有节点参与,每一次写操作需要集…...
FFmpeg功能使用
步骤:1,安装FFmpeg Download FFmpeg 在这里点击->Windows builds from gyan.dev;如下图 会跳到另外的下载界面: 在里面下拉选择点击ffmpeg-7.1-essentials_build.zip: 即可下载到FFmpeg; 使用&#…...
动手学深度学习-线性神经网络-7softmax回归的简洁实现
目录 初始化模型参数 重新审视Softmax的实现 优化算法 训练 小结 在 线性回归的实现中, 我们发现通过深度学习框架的高级API能够使实现 线性回归变得更加容易。 同样,通过深度学习框架的高级API也能更方便地实现softmax回归模型。 本节如在上一节…...
GenAI + 3D:开启4D场景重建的新纪元
近日,一项激动人心的研究成果在《GenAI + 3D》方向取得了重大进展,它提出了一种创新的方法,能够将普通的2D视频转换为完整的4D场景。想象一下,《黑客帝国》中的"子弹时间"效果——现在你不仅可以停留在一个特定的时刻来改变视角,还可以自由地在空间和时间中移动…...
记一个framebuffer显示混乱的低级错误
记一个framebuffer显示混乱的低级错误 由于framebuffer的基础知识不扎实,这个任务上我多卡了两天,差点把我搞死,于此记录为后鉴。 打算用awtk做一个多进程项目,计划把framebuffer的内容通过websocket输出到浏览器上去显示画面, …...
网络安全教学博客(二):常见网络安全威胁剖析
在上一篇博客中,我们了解了网络安全的基础概念和重要性。今天,让我们深入探讨一下常见的网络安全威胁,以便我们能够更好地识别和防范它们。 恶意软件(Malware) 病毒(Virus):病毒是一…...
【ZYNQ开发】Vitis下保存与快速加载BSP配置的方法
在使用Xilinx的Vitis进行ZYNQ PS端开发时,常常涉及到对于BSP的设置,比较典型的像是使用lwip时,需要对DHCP、memory以及send_buffer等进行一些自定义的修改。在设计到硬件描述文件需要进行更换(PL端更改程序)重新加载工…...
go开发中interface和方法接收器的使用
Go 语言中的接口和方法接收器学习 Go 中的 interface 就像是一个神奇的魔法杖,能让你轻松地将不同的类型拉到同一个阵营里。与其他语言的接口不同,Go 的接口无需显式声明“我实现了你”,只要你满足了接口规定的方法,Go 就会自动认…...
【昇腾】NPU ID:物理ID、逻辑ID、芯片映射关系
起因: https://www.hiascend.com/document/detail/zh/Atlas%20200I%20A2/23.0.0/re/npu/npusmi_013.html npu-smi info -l查询所有NPU设备: [naienotebook-npu-bd130045-55bbffd786-lr6t8 DCNN]$ npu-smi info -lTotal Count : 1NPU…...
景联文科技提供高质量文本标注服务,驱动AI技术发展
文本标注是指在原始文本数据上添加标签的过程,这些标签可以用来指示特定的实体、关系、事件等信息,以帮助计算机理解和处理这些数据。 文本标注是自然语言处理(NLP)领域的一个重要环节,它通过为文本的不同部分提供具体…...
【Spark】Spark Join类型及Join实现方式
如果觉得这篇文章对您有帮助,别忘了点赞、分享或关注哦!您的一点小小支持,不仅能帮助更多人找到有价值的内容,还能鼓励我持续分享更多精彩的技术文章。感谢您的支持,让我们一起在技术的世界中不断进步! Sp…...
docker安装、升级、以及sudo dockerd --debug查看启动失败的问题
1、docker安装包tar下载地址 Index of linux/static/stable/x86_64/ 2、下载tgz文件并解压 tar -zxvf docker-24.0.8.tgz 解压后docker文件夹下位docker相关文件 3、将老版本docker相关文件,备份 将 /usr/bin/docker下docker相关的文件,mv到备份目录…...
做T和做T+0有什么区别
做T和做T0在股市中实际上有紧密的联系,但也有所区别。以下是对两者的详细比较: 一、定义与原理 做T: 广义上,做T指的是一种通过低买高卖或高卖低买来赚取差价的交易策略。这种策略可以应用于不同的交易周期,包括日内交…...
【JAVA项目】基于ssm的【美食推荐管理系统】
【JAVA项目】基于ssm的【美食推荐管理系统】 技术简介:采用JSP技术、B/S架构、SSM框架、MySQL技术等实现。 系统简介:美食推荐管理系统,在系统首页可以查看首页、热门美食、美食教程、美食店铺、美食社区、美食资讯、我的、跳转到后台等内容。…...
从零开始学docker(五)-可用的docker镜像
最近docker镜像都不能访问,目前亲测可用的docker镜像可用,并拉取mysql测试完成。 [缺点] docker search 查不到镜像的索引列表,只能手动查询索引目录(解决方案在最后)。 linux服务器vim打开镜像文件daemon.json vim /e…...
repmgr集群部署-PostgreSQL高可用保证
📢📢📢📣📣📣 作者:IT邦德 中国DBA联盟(ACDU)成员,10余年DBA工作经验, Oracle、PostgreSQL ACE CSDN博客专家及B站知名UP主,全网粉丝10万 擅长主流Oracle、My…...
2020数字中国创新大赛-虎符网络安全赛道丨Web Writeup
本文是i春秋论坛作家「OPLV1H」表哥参加2020数字中国创新大赛-虎符网络安全赛道线上初赛的赛后总结,关于Web的Writeup记录,感兴趣的小伙伴快来学习吧。 1、hash_file — 是使用给定文件的内容生成哈希值,和文件名称无关。 2、jwt令牌结构和j…...
手动部署前后端项目到LInux上面
一:部署后端工程 在本地的idea中先启动当前的工程,然后访问一下,看看工程是否正常访问。 执行package指令,进行打包操作,将当前的springboot项目,打成一个jar包。 <!-- SpringBoot应用打包插件--> …...
【一本通】intervals
【一本通】intervals 💐The Begin💐点点关注,收藏不迷路💐 给出n个闭区间[ai,bi]和n个整数c1,……,cn。令Z表示一个整数集合,Z集合中最少要包含多少个整数可以使得每个区[ai,bi]都至少有ci个整数位于Z集合中。 输入 …...
测试脚本并发多进程:pytest-xdist用法
参考:https://www.cnblogs.com/poloyy/p/12694861.html pytest-xdist详解: https://www.cnblogs.com/poloyy/p/14708825.html 总 https://www.cnblogs.com/poloyy/category/1690628.html...
ALOHA 协议详解
注:本文为 “ALOHA 协议” 相关文章合辑。 未去重整理。 动态分配信道(ALOHA 协议、CSMA 协议) QuantumYou 于 2021-07-27 09:32:04 发布 ALOHA 协议 纯 ALOHA 协议 -纯 ALOHA 协议思想:不监听信道,不按时间槽发送…...
ios h5中在fixed元素中的input被focus时,键盘遮挡input (van-popup、van-feild)
问题描述: 前提:我使用的是vant组件库,其中一个页面中有一个van-popup组件,van-popup组件中又嵌套了一个van-field组件预期结果:当点击van-feild输入框时,键盘弹起,输入框显示在键盘上方实际结…...
【Mysql】索引下推、索引合并详解
文章目录 1. 索引下推(Index Condition Pushdown, ICP)定义工作机制实现过程优化的典型场景 2. 索引合并(Index Merge)定义索引合并方式使用限制 3. 对比与应用场景选用建议 这篇文章就简单的给大家介绍下索引下推、索引合并 1. 索…...
简易记事本项目—基于SSM+Vue前后端分离
🌈🌈🌈今天给大家分享的是:基于SSMVue的简易记事本项目 目录 引言 技术栈介绍 项目概述 1. 用户注册 2. 用户登录 3. 用户退出 4. 事件分类 5. 事件管理 项目主要图片 引言 在快节奏的现代生活中,我们常常被…...
Java转C之C/C++ 的调试和内存分析
C/C 的调试和内存分析工具非常丰富,这些工具可以帮助开发者定位错误、分析程序行为,以及检测内存问题(如内存泄漏、非法访问等)。下面将详细介绍常见的调试器和内存分析工具,并进行分类讲解。 一、调试器 1. GDB (GNU…...
Python 面向对象编程全面解析与深度探索
目录 类和对象的概念 类(Class) 对象(Object) (一)属性(Attributes) (a).实例属性(Instance Attributes) (b).类属性(Class Att…...
零配置打包工具 Parcel 的详细使用指南
前言 在前端开发中,选择一个高效且易用的打包工具至关重要。Parcel 作为一款零配置的 Web 应用打包工具,凭借其卓越的性能和简单的使用体验,赢得了众多开发者的青睐。它不仅能够自动处理依赖关系和代码打包,还支持热模块替换和多…...
批量查找文件关键字-工具
string find...
freeswitch(开启支持MCU视频会议,使用mod_av模块)
亲测版本centos 7.9系统–》 freeswitch1.10.9 本人freeswitch安装路径(根据自己的路径进入) /usr/local/freeswitch/etc/freeswitch场景说明: 有些场景想使用视频会议MCU融合画面进行开会使用方法: 第一步:下载插件 yum install -y epel-release yum install...
Quant connect的优势和不足,学习曲线难
Quant connect的优势和不足 Quant connect作为一个成熟的算法交易平台,具有许多优势,包括: 强大的回测功能:Quant connect提供了丰富的数据源和回测功能,可以对各种交易策略进行全面的回测和分析。 容易上手…...
对rust的全局变量使用drop方法
文章目录 rust处理全局变量的策略方法1:在main中自动Drop全局变量 参考 rust处理全局变量的策略 Rust 的静态变量不会在程序退出时自动调用 Drop,因为它们的生命周期与进程绑定。 use std::sync::OnceLock;struct GlobalData {content: String, }impl …...
使用FastGPT制做一个AI网站日志分析器
越来越的多网站面临每天上千次的扫描和各类攻击,及时发现攻击IP,并有效的屏蔽不良访问成为网站安全的重要保障,这里我们使用AI来完成对网站日志的日常分析。 我们来使用FastGPT来制做一个AI网站日志析器,下面就开始: …...
无限次使用 cursor pro
github地址 cursor-vip 使用方式 在 MacOS/Linux 中,请打开终端; 在 Windows 中,请打开 Git Bash。 然后执行以下命令来安装: 部分电脑可能会误报毒,需要关闭杀毒软件/电脑管家/安全防护再进行 方式1:通过…...
vuex 作用及五大组成部分
Vuex 是 Vue.js 的官方状态管理库,旨在帮助开发者构建大型应用时更好地管理和共享全局状态。它提供了一种集中式存储和管理应用所有组件的状态的方式,并且遵循单一状态树的原则。通过 Vuex,可以更容易地实现状态的可预测性和调试。 一、Vuex…...
Centos7上Jenkins+Docker+Git+SpringBoot自动化部署
文章目录 1.宿主机安装maven2.安装jenkins3.配置Jenkins4.Jenkins脚本自动安装JDK(可选) 1.宿主机安装maven wget https://dlcdn.apache.org/maven/maven-3/3.9.9/binaries/apache-maven-3.9.9-bin.tar.gz mv apache-maven-3.9.9-bin.tar.gz /usr/local…...
MATLAB图卷积神经网络GCN处理分子数据集节点分类研究
全文链接:https://tecdat.cn/?p38570 本文主要探讨了如何利用图卷积网络(GCN)对图中的节点进行分类。介绍了相关的数据处理、模型构建、训练及测试等环节,通过对分子数据集的操作实践,展示了完整的节点分类流程&#…...
高级Python游戏开发:创建一款多人对战坦克大战
在本教程中,我们将用Python的Pygame库开发一款高级的坦克大战游戏。这款游戏支持多人对战、碰撞检测、子弹射击以及地图障碍生成,适合作为学习Python高级游戏开发的练习项目。 一、游戏功能概述 多人对战模式:玩家可以操作坦克,在同一屏幕上互相攻击。子弹射击:坦克可以发…...
网站访问的基础-HTTP超文本传输协议
BS架构 浏览器Browser⬅➡服务器Server 浏览器和服务器之间通过 IP 地址进行通信,实现数据的请求和传输。 例如,当用户在浏览器中访问一个网站时,浏览器会根据用户输入的网址(通过 DNS 解析得到服务器 IP 地址)向服…...
使用Hydra库简化配置管理
使用Hydra库简化配置管理 简介 在现代软件开发中,配置管理是至关重要的。应用程序的灵活性和可维护性很大程度上取决于其如何处理配置。Hydra是一个由Facebook AI Research (FAIR) 开发的Python库,它旨在简化复杂应用的配置过程。Hydra使得开发者可以轻…...
Java对集合的操作方法
1. 数组转集合 //数组转集合 String[] split quickRechargeAmount.split(","); List<String> stringList Stream.of(split).collect(Collectors.toList()); 2. 对List集合数据内容进行分组 //对List集合数据内容进行分组 Map<String, List<LiveAppGi…...
WordPress酱茄主题 开源版 博客资讯自媒体网站模板
一款免费开源的WordPress主题,主题专为WordPress博客、资讯、自媒体网站而设计 运行环境 支持WordPress版本:5.6 兼容Chrome、Firefox、Safari等主流浏览器 支持设备:响应式布局,不同设备不同展示效果 服务器环境建议&#x…...