文本输入组件核心讲解与实战

news2026/4/7 0:29:33
一、文本输入类组件核心认知一组件整体定位TextInput、TextArea、Search是鸿蒙ArkTS核心文本输入类组件基于统一输入底层能力封装支持通用样式与高频事件针对单行短文本、多行长文本、搜索专属三大场景做差异化优化是移动端应用开发必备基础组件。二核心选型原则与组件差异核心原则按输入形态和业务场景选型禁止跨场景混用。三者核心差异、专属优势与适配场景如下组件名核心特性专属优势适用场景TextInput单行输入不自动折行输入模式丰富控制器光标/选框控制能力精细账号、密码、手机号、验证码等短文本输入TextArea多行输入自动折行支持滚动适配长文本可配置自动高度/滚动条支持长文本编辑控制评论、留言、文章编辑、长备注填写Search单行输入搜索场景专属内置搜索/清除图标默认回车搜索逻辑降低自定义开发成本全局搜索、商品检索、页面内搜索栏三核心绑定规范与组件接口各组件对应专属构造函数彼此独立不通用核心接口与绑定规则如下组件名专属构造函数接口核心可选属性TextInputTextInputOptionstext: ResourceStr、controller: TextInputController、placeholder: ResourceStrTextAreaTextAreaOptionstext: ResourceStr、controller: TextAreaController、placeholder: ResourceStrSearchSearchOptionsvalue: ResourceStr、controller: SearchController、placeholder: ResourceStr、icon:string说明ResourceStr为联合类型Resource | string支持直接传入字符串或通过$r引用系统/应用资源。二、核心能力一通用事件TextInput、TextArea、Search事件触发逻辑统一仅onSubmit回调参数存在组件差异其余事件参数完全一致事件名称功能说明onChange输入内容实时变化触发用于实时校验、字数统计、数据同步、自定义过滤onSubmit按下回车/搜索键触发Search支持点击搜索按钮用于表单提交、搜索请求、内容发布onFocus组件获得焦点触发用于样式高亮、提示展示、键盘唤起前置处理onBlur组件失去焦点触发用于格式校验、样式恢复、草稿自动保存onCopy复制内容触发用于复制监控、敏感内容脱敏、操作日志记录onCut剪切内容触发用于剪切行为监控、自定义剪切逻辑onPaste粘贴内容触发用于粘贴内容校验、长度限制、格式过滤onEditChange编辑状态变化触发用于编辑状态监控、键盘显隐联动onTextSelectionChange光标/文本选中范围变化触发用于选中内容处理、光标位置联动onContentScroll内容滚动触发用于长文本滚动监控、联动布局调整onWillInsert系统输入法插入内容前触发用于前置校验、非法内容拦截onDidInsert内容插入完成触发用于格式后置修正、数据同步onWillDelete内容删除前触发用于关键内容防删、删除确认onDidDelete内容删除完成触发用于空白内容兜底、状态同步onWillChange文本即将变更触发时序晚于增删事件用于全局内容拦截、复合规则校验时序说明onWillChange执行时序晚于onWillInsert/onWillDelete早于onDidInsert/onDidDelete。二输入内容过滤三大组件支持统一过滤方案Search仅需将text绑定替换为value过滤逻辑可直接复用inputFilter原生正则过滤轻量高效适用于基础字符级规则onWillChange内容变更前拦截支持自定义逻辑适用于位置、字节、自动修正等复杂场景。1.inputFilter原生正则过滤仅需编写允许的字符集无需添加^$首尾限定符非法字符直接拦截// 仅允许字母/数字账号/验证码场景 TextInput({ text: this.content, placeholder: 请输入字母/数字 }) .inputFilter([0-9A-Za-z], (filtered) { console.log(过滤的非法内容, filtered); })2.onWillChange自定义逻辑过滤仅支持返回boolean类型true允许本次内容变更false拦截变更界面不更新如需实现内容自动修正需手动更新绑定的状态变量并返回false拦截原始输入覆盖复杂业务规则// 首位禁止输入空格 TextInput({ text: this.inputText, placeholder: 首位无空格 }) .onWillChange((changeInfo:EditableTextChangeValue){ return changeInfo.content.trimStart() ! ; })3. 组合过滤生产高频用法inputFilter做底层字符限制 onWillChange做业务规则校验兼顾性能与需求// 账号规则仅字母/数字 首位不能为数字 TextInput({ text: this.account, placeholder: 字母开头字母/数字组合 }) .inputFilter([0-9A-Za-z]) .onWillChange((newValue) { return newValue.content.replace(/^[0-9]/, ) ! ; });三组件控制器所有控制器继承自TextContentControllerBase必须与组件一对一绑定禁止跨组件混用用于光标、选框、编辑状态精细控制。1. 控制器-组件对应关系输入组件专属控制器核心能力TextInputTextInputController单行文本光标定位、选框控制、退出编辑态TextAreaTextAreaController多行文本光标定位、选框控制、长文本编辑适配SearchSearchController继承TextInputController能力适配搜索框控制2. 通用核心方法方法名称功能说明典型场景caretPosition(pos: number): void设置光标位置索引从0开始提交后光标归位、验证码输入后光标跳转setTextSelection(start: number, end: number): void获焦状态下设置文本选中区域快速选中错误文本、批量编辑前置操作stopEditing(): void退出编辑态关闭自定义键盘自定义键盘手动关闭、提交后退出编辑3. 控制器基础使用方法private inputController new TextInputController(); // 光标移至文本开头 this.inputController.caretPosition(0); // 选中0~6位字符 this.inputController.setTextSelection(0, 6); // 主动退出编辑状态 this.inputController.stopEditing();四全局焦点控制焦点控制为页面级能力与组件控制器解耦是鸿蒙标准焦点管理方案1. 核心方法核心方法功能说明参数/场景requestFocus(id: string): boolean指定ID组件获取焦点唤起输入法参数组件唯一ID场景页面自动聚焦、校验失败定位clearFocus(): void清除全页面焦点收起软键盘无参数场景点击空白处、提交/搜索完成2. 标准使用代码// 获取全局焦点控制器 const focusController this.getUIContext().getFocusController(); // 精准聚焦组件必须绑定id focusController.requestFocus(account_input); // 全局失焦收起键盘 focusController.clearFocus();注意调用requestFocus前必须为目标组件设置唯一.id(xxx)否则聚焦失效。五专属输入模式枚举强制规范各组件仅可使用自身专属枚举严禁跨组件混用。1. TextInput 专属InputType枚举成员功能说明适用场景Normal基础通用输入用户名、普通文本Number纯数字输入验证码、订单号PhoneNumber电话格式输入手机号、座机号Email邮箱格式输入邮箱登录/注册表单Password密码隐藏输入账号登录密码NUMBER_PASSWORD纯数字密码支付密码、锁屏密码USER_NAME用户名专属支持密码库填充账号登录/注册NEW_PASSWORD新密码支持强度校验密码重置、新用户注册NUMBER_DECIMAL带一位小数点数字金额、身高、体重URL网址格式输入链接填写、校验ONE_TIME_CODE一次性验证码API20短信验证码输入2. TextArea 专属TextAreaType枚举成员功能说明适用场景NORMAL基础多行输入评论、留言、长文本NUMBER纯数字多行输入长数字序列、数字备注PHONE_NUMBER电话格式多行输入批量号码录入EMAIL邮箱格式多行输入邮箱批量录入NUMBER_DECIMAL带小数点数字长文本内含数值URL网址格式长文本内含链接ONE_TIME_CODE一次性验证码API20验证码批量录入3. Search 专属SearchType枚举成员功能说明适用场景NORMAL通用搜索输入全文、关键词检索NUMBER纯数字搜索订单号、快递号、ID检索PHONE_NUMBER电话格式搜索手机号、联系电话检索EMAIL邮箱格式搜索用户邮箱检索NUMBER_DECIMAL小数搜索金额、数值区间检索URL网址搜索链接、外链检索ONE_TIME_CODE验证码检索校验码信息检索六通用回车键类型EnterKeyType三大组件通用枚举自定义软键盘回车按钮样式与语义触发后均执行onSubmit枚举成员键盘显示语义核心场景Go前往/箭头执行操作、页面跳转单输入框提交、密码框确认Search搜索/放大镜搜索触发Search组件、搜索栏Send发送内容发送聊天、评论快速发送Next下一个/右箭头切换下一个输入框表单连续输入账号→密码→验证码Done完成/对勾结束输入、收起键盘长文本编辑完成、表单最后一项输入PREVIOUS上一个/左箭头切换上一个输入框表单反向连续输入验证码→密码→账号NEW_LINE回车/换行换行/确认TextArea长文本换行、多行内容编辑三、各组件专属能力一Search 组件专属能力基于TextInput封装聚焦搜索场景提供原生图标与按钮配置属性名称功能说明实战场景searchButton右侧搜索按钮配置文字/样式点击触发onSubmit搜索栏内置提交按钮无需自定义searchIcon自定义左侧搜索图标尺寸、颜色、资源统一APP图标风格适配深色模式cancelButton清除按钮配置显隐规则、图标输入后一键清空内容二TextArea 组件专属能力聚焦多行长文本提供排版与高度控制能力属性名称功能说明实战场景minLines/maxLines最小/最大行数支持溢出滚动/截断评论区3~5行超出滚动lineSpacing行间距支持仅行间生效长文本排版优化提升可读性ellipsisMode超长文本省略位置首/中/尾非编辑态长文本预览heightAdaptivePolicy高度自适应策略动态适配输入内容高度三TextInput 组件专属能力聚焦单行表单/密码场景提供表单专属样式与交互1. 专属属性属性名称功能说明实战场景showUnderline开启下划线样式替代常规边框表单输入框简约下划线风格underlineColor配置多状态下划线颜色常态/聚焦/错误/禁用输入态高亮、错误态标红showPassword/showPasswordIcon密码显隐开关 显隐图标控制密码框一键切换可见/隐藏showUnit输入框后置单位展示需配合下划线金额框显示「元」、手机号框标注用途showError绑定错误提示文本自动展示/隐藏表单校验失败实时提示passwordRules密码生成规则透传密码保险箱新密码输入自动生成合规密码2. 专属事件事件名称功能说明实战场景onSecurityStateChange密码显隐状态切换回调同步图标状态、全局显隐联动四、工程结构基于鸿蒙6.0 API 20、Stage模型创建InputApplication工程标准目录结构如下InputApplication/ ├── AppScope/ │ └── app.json5 ├── entry/ │ ├── src/ │ │ ├── main/ │ │ │ ├── ets/ │ │ │ │ ├── entryability/ │ │ │ │ │ └── EntryAbility.ets │ │ │ │ ├── pages/ │ │ │ │ │ ├── Index.ets // 导航主页面 │ │ │ │ │ ├── InputBasicPage.ets // 示例1三大组件基础用法 │ │ │ │ │ ├── RegisterFormPage.ets // 示例2注册表单实战 │ │ │ │ │ └── InputSearchBarPage.ets // 示例3顶部搜索栏实战 │ │ │ │ │ └── CommentAreaPage.ets // 示例4评论区实战 │ │ │ ├── resources/ │ │ │ │ └── media/ // 自定义图标icon_back、search、icon_clear │ │ │ └── module.json5 │ │ └── build-profile.json5 └── build-profile.json5五、导航主页面Index.etsimport { router } from kit.ArkUI; interface RouterButton { title: string; url: string; } Entry Component struct Index { private buttonList: RouterButton[] [ { title: 示例1三大组件基础用法, url: pages/InputBasicPage }, { title: 示例2标准注册表单实战, url: pages/RegisterFormPage }, { title: 示例3顶部搜索栏实战, url: pages/InputSearchBarPage }, { title: 示例4发布评论实战, url: pages/CommentAreaPage }, ]; build() { Column({ space: 12 }) { Text(TextInput/TextArea/Search) .fontSize(30) .fontWeight(FontWeight.Bold) .margin({ bottom: 30 }); ForEach( this.buttonList, (item: RouterButton) { Button(item.title) .width(85%) .height(42) .backgroundColor($r(sys.color.brand)) .fontColor(Color.White) .borderRadius(8) .fontSize(15) .onClick(() router.pushUrl({ url: item.url })); }, (item: RouterButton) item.url ); } .width(100%) .height(100%) .justifyContent(FlexAlign.Center) .backgroundColor(#F5F5F5); } }运行效果六、示例1三大组件基础用法InputBasicPage.ets核心掌握点区分TextInput/TextArea的text绑定与Search的value绑定正确使用组件专属输入类型枚举完成核心事件绑定与数据实时同步控制器一对一绑定规范TextArea行数、行间距、溢出等长文本配置。import { router } from kit.ArkUI; interface RouterButton { title: string; url: string; } Entry Component struct Index { private buttonList: RouterButton[] [ { title: 示例1三大组件基础用法, url: pages/InputBasicPage }, { title: 示例2标准注册表单实战, url: pages/RegisterFormPage }, { title: 示例3顶部搜索栏实战, url: pages/InputSearchBarPage }, { title: 示例4发布评论实战, url: pages/CommentAreaPage }, ]; build() { Column({ space: 12 }) { Text(TextInput/TextArea/Search) .fontSize(30) .fontWeight(FontWeight.Bold) .margin({ bottom: 30 }); ForEach( this.buttonList, (item: RouterButton) { Button(item.title) .width(85%) .height(42) .backgroundColor($r(sys.color.brand)) .fontColor(Color.White) .borderRadius(8) .fontSize(15) .onClick(() router.pushUrl({ url: item.url })); }, (item: RouterButton) item.url ); } .width(100%) .height(100%) .justifyContent(FlexAlign.Center) .backgroundColor(#F5F5F5); } }运行效果七、示例2标准注册表单实战RegisterFormPage.ets核心掌握点TextInput表单场景完整配置与属性绑定inputFilter字符级过滤与业务校验密码框全局显隐双向联动实时失焦提交三层校验逻辑全局焦点控制与键盘避让表单按钮动态状态控制。Entry Component struct RegisterFormPage { State phone: string ; State pwd: string ; State confirmPwd: string ; State phoneError: string ; State pwdError: string ; State confirmPwdError: string ; State isShowPwd: boolean false; private phoneController new TextInputController(); private pwdController new TextInputController(); private confirmPwdController new TextInputController(); private showToast(message: string) { try { this.getUIContext().getPromptAction().showToast({ message, duration: 2000 }); } catch (error) {} } private validateForm(): boolean { this.phoneError this.pwdError this.confirmPwdError ; let isPass true; if (!/^1[3-9]\d{9}$/.test(this.phone.trim())) { this.phoneError this.phone ? 手机号格式错误 : 请输入手机号; isPass false; } if (this.pwd.trim().length 6 || this.pwd.trim().length 16) { this.pwdError this.pwd ? 密码长度为6-16位 : 请设置密码; isPass false; } if (this.confirmPwd.trim() ! this.pwd.trim()) { this.confirmPwdError this.confirmPwd ? 两次密码不一致 : 请确认密码; isPass false; } return isPass; } private submitRegister() { if (this.validateForm()) { this.showToast(注册成功); this.phone this.pwd this.confirmPwd ; this.isShowPwd false; this.getUIContext().getFocusController().clearFocus(); } } onPageShow(): void { try { setTimeout(() { this.getUIContext().getFocusController().requestFocus(phone_id); }, 200); } catch (error) {} } build() { Scroll() { Column({ space: 20 }) { Text(用户注册) .fontSize(28) .fontWeight(FontWeight.Bold) .margin({ top: 40, bottom: 20 }) .width(100%) .textAlign(TextAlign.Center); // 手机号输入 TextInput({ placeholder: 请输入手机号, controller: this.phoneController, text: this.phone }) .inputFilter([0-9], (filteredChars) { console.log(过滤非数字字符, filteredChars); }) .type(InputType.PhoneNumber) .maxLength(11) .width(90%) .showUnderline(true) .underlineColor({ error: #FF4D4F }) .showError(this.phoneError) .id(phone_id) .onChange((value) { this.phone value; this.phoneError ; }) .onBlur(() { if (this.phone !/^1[3-9]\d{9}$/.test(this.phone)) { this.phoneError 手机号格式错误; } }) .onSubmit(() { try { this.getUIContext().getFocusController().requestFocus(pwd_id); } catch (error) {} }); // 密码输入 TextInput({ placeholder: 请设置密码6-16位, controller: this.pwdController, text: this.pwd }) .type(InputType.Password) .maxLength(16) .width(90%) .id(pwd_id) .onWillChange((newValue) { return newValue.content.trimStart() ! ; }) .inputFilter([a-zA-Z0-9!#$%^*], (filtered) { filtered this.showToast(禁止输入${filtered}); }) .showPasswordIcon(true) .showPassword(this.isShowPwd) .onSecurityStateChange((isShowPassword: boolean) { this.isShowPwd isShowPassword; }) .onChange((value) { this.pwd value; this.pwdError ; }) .onSubmit(() { try { this.getUIContext().getFocusController().requestFocus(confirm_pwd_id); } catch (error) {} }); // 确认密码 TextInput({ placeholder: 请再次输入密码, controller: this.confirmPwdController, text: this.confirmPwd }) .type(InputType.Normal) .maxLength(16) .width(90%) .showUnderline(true) .underlineColor({ error: #FF4D4F }) .showError(this.confirmPwdError) .id(confirm_pwd_id) .inputFilter([a-zA-Z0-9!#$%^*]) .showPasswordIcon(true) .showPassword(this.isShowPwd) .onSecurityStateChange((isShowPassword: boolean) { this.isShowPwd isShowPassword; }) .onChange((value) { this.confirmPwd value; this.confirmPwdError ; }) .onSubmit(() this.submitRegister()); Row({ space: 8 }) { Checkbox() .select(this.isShowPwd) .selectedColor($r(sys.color.brand)) .onChange((v) this.isShowPwd v); Text(显示密码).fontSize(14).fontColor(#666666); } .width(90%) .margin({ top: 5 }); Button(立即注册) .width(90%) .height(45) .backgroundColor( this.phone.trim() this.pwd.trim() this.confirmPwd.trim() ? $r(sys.color.brand) : #CCCCCC ) .fontColor(Color.White) .enabled(this.phone.trim() this.pwd.trim() this.confirmPwd.trim() ? true:false) .onClick(() this.submitRegister()); } .width(100%) .alignItems(HorizontalAlign.Center); } .width(100%) .onClick(() this.getUIContext().getFocusController().clearFocus()) .backgroundColor(Color.White); } }运行效果账号-输入框样式-数字键盘密码-输入框样式—密码键盘密码-输入框样式—有图标八、示例3顶部搜索栏实战InputSearchBarPage.ets核心掌握点搜索栏标准化布局实现Search图标、按钮、输入类型完整配置实时联想词过滤与列表渲染onChangeonSubmitonBlur事件组合焦点控制与交互优化粘贴内容长度校验。import router from ohos.router; Entry Component struct InputSearchBarPage { // 搜索关键词状态 State searchKey: string ; // 联想词列表状态空数组初始值 State suggestList: string[] []; // 预设联想词库 private allSuggestWords [ ArkTS基础教程, 鸿蒙组件开发, 鸿蒙基础入门, TextInput用法, Search组件实战, 鸿蒙布局规范, ArkUI开发指南 ]; // 基础提示 private showToast(message: string) { try { this.getUIContext().getPromptAction().showToast({ message: message }); } catch (error) { // TODO: Implement error handling. } } build() { Column({ space: 0 }) { // 顶部搜索栏布局 Row({ space: 20 }) { Image($r(app.media.icon_back)) .width(25) .height(25) .objectFit(ImageFit.Contain) .onClick((){ router.back() }) // 搜索框Search专属能力配置 Search({ placeholder: 搜索本页内容..., value: this.searchKey }) .id(searchInput) .type(SearchType.NORMAL) .height(36) .placeholderFont({ size: 14 }) .enterKeyType(EnterKeyType.Search) .backgroundColor(#F5F5F5) .layoutWeight(1) .constraintSize({maxWidth:375*1.5}) .searchIcon({ color: #999, size: 18,src:$r(app.media.search)}) // 自定义搜索图标 .cancelButton({ style: CancelButtonStyle.INPUT, icon: { src: $r(app.media.icon_clear), size: 16, color: #666 } // 自定义清除图标 }) .searchButton(搜索, { fontSize: 15, fontColor: #007DFF, autoDisable: true // 无内容时按钮置灰不可点击 }) // 输入内容变化时生成联想词 .onChange((value: string) { this.searchKey value; this.getSearchSuggest(value); }) // 失去焦点时延迟清空联想词 .onBlur(() { setTimeout(() { this.suggestList []; }, 200); }) // 回车/点击搜索按钮提交 .onSubmit((searchContent: string) { this.doSearch(searchContent); this.suggestList []; this.getUIContext().getFocusController().clearFocus(); // 搜索完成全局失焦 }) // 粘贴事件校验粘贴内容格式 .onPaste((value) { if (value.length 50) { this.showToast(搜索内容不能超过50字); } }); } .width(100%) .height(60) .padding({left:15,right:15}) .justifyContent(FlexAlign.SpaceBetween) .backgroundColor(Color.White); // 联想词列表 List() { ForEach(this.suggestList, (item: string) { ListItem() { Text(item) .fontSize(14) .fontColor(#333) .padding({ left: 20, top: 12, bottom: 12 }) .width(100%) } .backgroundColor(Color.White) // 点击联想词填充搜索失焦 .onClick(() { this.searchKey item; this.doSearch(item); this.suggestList []; this.getUIContext().getFocusController().clearFocus(); }); }, (item: string) item ) } .divider({strokeWidth:1,startMargin:20,endMargin:20}) .width(100%) .height(calc(100% - 60vp)) .backgroundColor($r(sys.color.comp_background_list_card)); } .width(100%) .height(100%) .backgroundColor(#F5F5F5); } // 生成联想词方法根据输入关键词过滤预设词库 private getSearchSuggest(keyword: string) { if (!keyword || keyword.trim() ) { this.suggestList []; return; } // 不区分大小写过滤 this.suggestList this.allSuggestWords.filter(item item.toLowerCase().includes(keyword.toLowerCase()) ); } // 通用搜索方法可扩展为接口请求、内容检索等业务逻辑 private doSearch(keyword: string) { if (!keyword || keyword.trim() ) { this.showToast(请输入搜索关键词); return; } this.showToast(执行搜索${keyword}); console.log(执行搜索${keyword}); } }运行效果搜索框自定义图标回车键显示-搜索九、核心知识点总结一组件选型核心原则单行短文本账号、密码、手机号、验证码→TextInput单行不折行输入模式与控制器控制能力丰富多行长文本评论、留言、文章编辑→TextArea自动折行、支持滚动行数与排版配置完善搜索专属场景全局/页面内搜索→Search内置图标与搜索语义减少自定义开发富文本编辑 → 选用鸿蒙RichEditor不适用常规输入组件单独设计一节内容针对富文本讲解二枚举与绑定规范输入类型强绑定InputType→TextInput、TextAreaType→TextArea、SearchType→Search禁止混用数据绑定区分TextInput/TextArea使用textSearch使用value回车键类型EnterKeyType全组件通用按业务语义选择。三通用开发规范键盘避让输入页面外层嵌套Scroll避免软键盘遮挡输入过滤简单字符规则用inputFilter复杂业务规则用onWillChange可组合使用校验分层onChange清错、onBlur格式校验、submit全量校验控制器与组件一一对应禁止跨组件复用用于光标与选框精细控制焦点管理用getUIContext().getFocusController()做全局聚焦/失焦组件需绑定唯一id。四事件与交互规范onChange负责数据实时同步与基础过滤onSubmitSearch直接取searchContentTextInput/TextArea从event.text取值onPaste用于粘贴内容长度、格式校验onWillChange内容变更前置拦截支持自动修正复杂过滤首选方案。五组件专属能力要点TextInput聚焦表单与密码场景核心使用下划线、错误提示、密码显隐相关APITextArea聚焦长文本核心配置行数、行间距、高度自适应、溢出策略Search聚焦搜索场景核心使用图标定制、搜索按钮、清除按钮、空内容禁用等交互配置。

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

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

相关文章

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…