OpenHarmony实例:【资源管理器】

 介绍

本工程使用[@ohos.app.ability.common] 接口中的AbilityContext类,获取资源管理器resourceManager,使用[@ohos.resourceManager.d.ts]中的接口,展示了格式化字符串查询、基于指定屏幕分辨率查询媒体资源、获取系统资源管理对象等基础功能,以及展示了资源静态overlay以及运行时overlay的特性功能。

效果预览

主页

main

使用说明

此界面为主页面,其中展示了资源管理API各类接口的调用以及特性Overlay场景功能。其作用有:

1、点击资源API调用示例按钮,可跳转到资源API示例页面

2、点击Overlay使用示例,可以跳转到Overlay的使用示例界面。

资源API调用示例
资源API测试

main

使用说明

此页面展示了当前资源管理接口的调用以及接口对应的返回结果。

静态overlay场景
overlay场景

main

使用说明

此页面展示静态overlay功能,功能使用如下:

1、静态overlay是默认使能的,当前显示的是静态overlay中的字符串和图标。

2、点击Disable可以触发去使能,重启应用可以恢复显示应用的字符串和图标。

3、点击enable可以触发使能,重启应用可以再次显示overlay中的字符串和图标。

源码参考:[Overlay示例]在最后

运行时overlay场景
运行时overlay场景

main

使用说明

此页面展示运行时overlay功能,功能使用如下:

1、点击addResource可以触发运行时overlay,此时会使用运行时overlay中的资源覆盖之前的字符串和图标。

2、点击removeResource可以触发移除运行时overlay,此时会移除运行时overlay,恢复到覆盖前的字符串和图标。

具体实现

资源API调用示例具体实现:

1、使用getContext()接口获取context对象,使用context.resourceManager获取资源管理对象,然后调用resourceManager内部的相关接口获取对应资源,例如:

  • 获取字符串资源:resourceManager.getStringValue()
  • 获取字符串数组资源:resourceManager.getStringArrayValue()
  • 获取图片资源:resourceManager.getMediaContent()
  • 获取格式化字符串资源:resourceManager.getStringSync()
  • 获取指定屏幕分辨率媒体资源:resourceManager.getMediaContentBase64()

2、导包resourceManager,使用resourceManager.getSystemResourceManager()获取系统资源管理对象,然后获取系统资源。

鸿蒙OS开发更多内容↓点击HarmonyOS与OpenHarmony技术
鸿蒙技术文档开发知识更新库qr23.cn/AKFP8k在这。

搜狗高速浏览器截图20240326151450.png

源码参考:[资源API调用示例]

/** Copyright (c) 2023 Huawei Device Co., Ltd.* Licensed under the Apache License, Version 2.0 (the "License");* you may not use this file except in compliance with the License.* You may obtain a copy of the License at**     http://www.apache.org/licenses/LICENSE-2.0** Unless required by applicable law or agreed to in writing, software* distributed under the License is distributed on an "AS IS" BASIS,* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.* See the License for the specific language governing permissions and* limitations under the License.*/import resourceManager from '@ohos.resourceManager';import hilog from '@ohos.hilog';import { BusinessError } from '@ohos.base';const TAG = '[Sample_ResourceManager]';const DOMAIN = 0xFF00;const SPECIFIED_NUM = 2;let resMgr = getContext().resourceManager;async function getString(resId: number): Promise<string | undefined> {try {let value = await resMgr.getStringValue(resId);return value;} catch (error) {let code = (error as BusinessError).code;let message = (error as BusinessError).message;hilog.error(DOMAIN, TAG, `getStringValue failed, error code: ${code}, message: ${message}.`);return;}}async function getStringArray(resource: resourceManager.Resource): Promise<Array<string> | undefined> {try {let value = await resMgr.getStringArrayValue(resource);return value;} catch (error) {let code = (error as BusinessError).code;let message = (error as BusinessError).message;hilog.error(DOMAIN, TAG, `getStringArrayValue failed, error code: ${code}, message: ${message}.`);return;}}async function getPluralString(resId: number, num: number): Promise<string | undefined> {try {let value = await resMgr.getPluralStringValue(resId, num);return value;} catch (error) {let code = (error as BusinessError).code;let message = (error as BusinessError).message;hilog.error(DOMAIN, TAG, `getPluralStringValue failed, error code: ${code}, message: ${message}.`);return;}}async function getDeviceCapability(): Promise<resourceManager.DeviceCapability | undefined> {try {let value = await resMgr.getDeviceCapability();return value;} catch (error) {let code = (error as BusinessError).code;let message = (error as BusinessError).message;hilog.error(DOMAIN, TAG, `getDeviceCapability failed, error code: ${code}, message: ${message}.`);return;}}async function getConfiguration(): Promise<resourceManager.Configuration | undefined> {try {let value = await resMgr.getConfiguration();return value;} catch (error) {let code = (error as BusinessError).code;let message = (error as BusinessError).message;hilog.error(DOMAIN, TAG, `getConfiguration failed, error code: ${code}, message: ${message}.`);return;}}async function getMedia(resId: number): Promise<Uint8Array | undefined> {try {let value = await resMgr.getMediaContent(resId);return value;} catch (error) {let code = (error as BusinessError).code;let message = (error as BusinessError).message;hilog.error(DOMAIN, TAG, `getMediaContent failed, error code: ${code}, message: ${message}.`);return;}}async function getMediaBase64(resId: number): Promise<string | undefined> {try {let value = await resMgr.getMediaContentBase64(resId);return value;} catch (error) {let code = (error as BusinessError).code;let message = (error as BusinessError).message;hilog.error(DOMAIN, TAG, `getMediaContentBase64 failed, error code: ${code}, message: ${message}.`);return;}}function getFormatString(resId: number, world: string): string | undefined {try {let value = resMgr.getStringSync(resId, world);return value;} catch (error) {let code = (error as BusinessError).code;let message = (error as BusinessError).message;hilog.error(DOMAIN, TAG, `getStringSync failed, error code: ${code}, message: ${message}.`);return;}}async function getDensityMediaBase64(resId: number, density: number): Promise<string | undefined> {try {let value = await resMgr.getMediaContentBase64(resId, density);return value;} catch (error) {let code = (error as BusinessError).code;let message = (error as BusinessError).message;hilog.error(DOMAIN, TAG, `getDensityMediaBase64 failed, error code: ${code}, message: ${message}.`);return;}}async function getSystemMediaBase64(resId: number): Promise<string | undefined> {// 获取仅系统资源管理对象let sysMgr = resourceManager.getSystemResourceManager();try {let value = await sysMgr.getMediaContentBase64(resId);return value;} catch (error) {let code = (error as BusinessError).code;let message = (error as BusinessError).message;hilog.error(DOMAIN, TAG, `getMediaContentBase64 failed, error code: ${code}, message: ${message}.`);return;}}@Entry@Componentstruct Index {@State string_str: string = 'string'@State strArray: string = 'stringArray'@State plural: string = 'plural'@State configuration: string = 'configuration'@State capability: string = 'capability'@State media: string = 'media'@State mediaBase: string = 'mediaBase'@State formatStr: string = 'Format String'@State densityMedia: string = 'Density Media'@State systemRes: string = 'System Res'async aboutToAppear() {this.string_str = await getString($r('app.string.string_str').id) as string;let resource: resourceManager.Resource = {bundleName: "ohos.samples.resourcemanager",moduleName: "entry",id: $r('app.strarray.str_array').id}this.strArray = JSON.stringify(await getStringArray(resource) as Array<string>);this.plural = await getPluralString($r('app.plural.eat_apple').id, SPECIFIED_NUM) as string;this.configuration = JSON.stringify(await getConfiguration() as resourceManager.Configuration);this.capability = JSON.stringify(await getDeviceCapability() as resourceManager.DeviceCapability);this.media = JSON.stringify(((await getMedia($r('app.media.app_icon').id)) as Uint8Array).length);this.mediaBase = JSON.stringify(((await getMediaBase64($r('app.media.app_icon').id)) as string).length);this.formatStr = getFormatString($r('app.string.formatStr').id,await getString($r('app.string.world').id) as string) as string;this.densityMedia = await getDensityMediaBase64($r('app.media.density').id, 640) as string;this.systemRes = await getSystemMediaBase64($r('sys.media.ohos_app_icon').id) as string;}build() {Column() {Text($r('app.string.title')).width('100%').height(50).backgroundColor($r('app.color.text_color')).fontColor(Color.White).fontSize(20).padding({ left: 15 })Scroll() {Column() {Text($r('app.string.stringDesc')).fontSize(25)Text(this.string_str).fontSize(25).fontColor('#ffff0000').fontWeight(FontWeight.Bold)Text($r('app.string.stringArrayDesc')).fontSize(25)Text(this.strArray).fontSize(25).fontColor('#ffff0000').fontWeight(FontWeight.Bold)Text($r('app.string.pluralStringDesc')).fontSize(25)Text(this.plural).fontSize(25).fontColor('#ffff0000').fontWeight(FontWeight.Bold)Text($r('app.string.configurationDesc')).fontSize(25)Text(this.configuration).fontSize(25).fontColor('#ffff0000').fontWeight(FontWeight.Bold)Text($r('app.string.capabilityDesc')).fontSize(25)Text(this.capability).fontSize(25).fontColor('#ffff0000').fontWeight(FontWeight.Bold)Text($r('app.string.mediaDesc')).fontSize(25)Text(this.media).fontSize(25).fontColor('#ffff0000').fontWeight(FontWeight.Bold)Text($r('app.string.mediaBase64Desc')).fontSize(25)Text(this.mediaBase).fontSize(25).fontColor('#ffff0000').fontWeight(FontWeight.Bold)Text($r('app.string.formatStrDesc')).fontSize(25)Text(this.formatStr).fontSize(25).fontColor('#ffff0000').fontWeight(FontWeight.Bold)Text($r('app.string.densityMediaDesc')).fontSize(25)Image(this.densityMedia).id('getDensityMedia').height('10%')Text($r('app.string.systemResDesc')).fontSize(25)Image(this.systemRes).id('getSystemMedia').height('10%')}.width('100%').padding(10).alignItems(HorizontalAlign.Start)}}.width('100%').height('100%')}}
overlay场景的具体实现:

1、静态overlay主要是通过加载overly中的资源实现资源覆盖,需要在对应的module.json中添加"targetModuleName":"entry", 表示覆盖entry中的资源,默认使能,也可调用包管理接口进行使能和去使能。

使用步骤为:在安装完entry的hap后,需要把library模块生成的library-default-signed.hsp推送到/data/test下,使用bm install命令进行安装。

脚本语言如下:

hdc_std shell mount -o remount,rw /

hdc_std install ./entry-default-signed.hap

hdc_std shell mkdir /data/test

hdc_std file send ./libraryOverlay-default-signed.hsp /data/test

hdc_std shell bm install -p "/data/test/libraryOverlay-default-signed.hsp"

pause

2、运行时overlay资源加载,主要是在应用运行过程中实现资源的覆盖,需要应用主动调用资源的addResource接口实现资源的覆盖以及资源的移除,此功能不持久化。

使用步骤为: 在安装完entry的hap后,需要把libraryRuntimeOverlay模块生成的libraryRuntimeOverlay-default-signed.hsp推送到应用对应的安装目录下。

脚本语言如下:

hdc_std shell mount -o remount,rw /

hdc_std install ./entry-default-signed.hap

hdc_std file send ./libraryRuntimeOverlay-default-signed.hsp /data/app/el1/bundle/public/ohos.samples.resourcemanager

pause

源码参考:[Overlay示例]

/** Copyright (c) 2023 Huawei Device Co., Ltd.* Licensed under the Apache License, Version 2.0 (the "License");* you may not use this file except in compliance with the License.* You may obtain a copy of the License at**     http://www.apache.org/licenses/LICENSE-2.0** Unless required by applicable law or agreed to in writing, software* distributed under the License is distributed on an "AS IS" BASIS,* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.* See the License for the specific language governing permissions and* limitations under the License.*/import overlay from '@ohos.bundle.overlay';import { BusinessError } from '@ohos.base';@Entry@Componentstruct Overlay {private resmgr = getContext().resourceManager;@State message: string = 'Test Overlay'@State resources: string = this.resmgr.getStringSync($r("app.string.test_string").id)@State pixmap: PixelMap = this.resmgr.getDrawableDescriptor($r("app.media.icon").id).getPixelMap()build() {Column() {Text($r('app.string.title')).width('100%').height(50).backgroundColor($r('app.color.text_color')).fontColor(Color.White).fontSize(20).padding({ left: 15 })Text(`${this.message}`).fontSize(50).fontWeight(FontWeight.Bold).margin({top: 40})Button() {Text('disable').fontSize(20).fontWeight(FontWeight.Bold)}.type(ButtonType.Capsule).margin({top: 50}).backgroundColor('#0D9FFB').width('50%').height('5%').onClick(() => {// 非使能overlay.setOverlayEnabled("libraryOverlay", false, (err, data) => {if (err && err.code != 0) {console.log("error:" + JSON.stringify(err));this.message = this.resmgr.getStringSync($r('app.string.unEnableFailed').id);} else {console.log("data:" + JSON.stringify(data));this.message = this.resmgr.getStringSync($r('app.string.unEnableSuccess').id);}})})Button() {Text('enable').fontSize(20).fontWeight(FontWeight.Bold)}.type(ButtonType.Capsule).margin({top: 20}).backgroundColor('#0D9FFB').width('50%').height('5%').onClick(() => {// 使能overlay.setOverlayEnabled("libraryOverlay", true, (err, data) => {if (err && err.code != 0) {console.log("error:" + JSON.stringify(err));this.message = this.resmgr.getStringSync($r('app.string.enableFailed').id);} else {this.message = this.resmgr.getStringSync($r('app.string.enableSuccess').id);}})})Button() {Text('addResource').fontSize(20).fontWeight(FontWeight.Bold)}.type(ButtonType.Capsule).margin({top: 20}).backgroundColor('#0D9FFB').width('50%').height('5%').onClick(() => {let path = getContext().bundleCodeDir + "/libraryRuntimeOverlay-default-signed.hsp";try {let ret = this.resmgr.addResource(path);console.error("addResource: ret" + JSON.stringify(ret));} catch (error) {let code = (error as BusinessError).code;let message = (error as BusinessError).message;console.error(`addResource failed, error code: ${code}, message: ${message}.`);}this.pixmap = this.resmgr.getDrawableDescriptor($r("app.media.icon").id).getPixelMap();this.resources = this.resmgr.getStringSync($r("app.string.test_string").id);})Button() {Text('removeResource').fontSize(20).fontWeight(FontWeight.Bold)}.type(ButtonType.Capsule).margin({top: 20}).backgroundColor('#0D9FFB').width('50%').height('5%').onClick(() => {let path = getContext().bundleCodeDir + "/libraryRuntimeOverlay-default-signed.hsp";try {this.resmgr.removeResource(path);} catch (error) {let code = (error as BusinessError).code;let message = (error as BusinessError).message;console.error(`removeResource failed, error code: ${code}, message: ${message}.`);}this.pixmap = this.resmgr.getDrawableDescriptor($r("app.media.icon").id).getPixelMap();this.resources = this.resmgr.getStringSync($r("app.string.test_string").id);})Image(this.pixmap).width(100).height(100)Text(this.resources).fontSize(50).fontWeight(FontWeight.Bold)}.width('100%').height('100%')}}

最后呢,很多开发朋友不知道需要学习那些鸿蒙技术?鸿蒙开发岗位需要掌握那些核心技术点?为此鸿蒙的开发学习必须要系统性的进行。

而网上有关鸿蒙的开发资料非常的少,假如你想学好鸿蒙的应用开发与系统底层开发。你可以参考这份资料,少走很多弯路,节省没必要的麻烦。由两位前阿里高级研发工程师联合打造《鸿蒙NEXT星河版OpenHarmony开发文档》里面内容包含了(ArkTS、ArkUI开发组件、Stage模型、多端部署、分布式应用开发、音频、视频、WebGL、OpenHarmony多媒体技术、Napi组件、OpenHarmony内核、Harmony南向开发、鸿蒙项目实战等等)鸿蒙(Harmony NEXT)技术知识点

如果你是一名Android、Java、前端等等开发人员,想要转入鸿蒙方向发展。可以直接领取这份资料辅助你的学习。下面是鸿蒙开发的学习路线图。

高清完整版请点击→《鸿蒙NEXT星河版开发学习文档》

针对鸿蒙成长路线打造的鸿蒙学习文档。话不多说,我们直接看详细资料鸿蒙(OpenHarmony )学习手册(共计1236页)与鸿蒙(OpenHarmony )开发入门教学视频,帮助大家在技术的道路上更进一步。

《鸿蒙 (OpenHarmony)开发学习视频》

图片

《鸿蒙生态应用开发V2.0白皮书》

图片

《鸿蒙 (OpenHarmony)开发基础到实战手册》

获取这份鸿蒙星河版学习资料,请点击→《鸿蒙NEXT星河版开发学习文档》

OpenHarmony北向、南向开发环境搭建

图片

《鸿蒙开发基础》

  1. ArkTS语言

  2. 安装DevEco Studio

  3. 运用你的第一个ArkTS应用

  4. ArkUI声明式UI开发

  5. .……

图片

《鸿蒙开发进阶》

  1. Stage模型入门

  2. 网络管理

  3. 数据管理

  4. 电话服务

  5. 分布式应用开发

  6. 通知与窗口管理

  7. 多媒体技术

  8. 安全技能

  9. 任务管理

  10. WebGL

  11. 国际化开发

  12. 应用测试

  13. DFX面向未来设计

  14. 鸿蒙系统移植和裁剪定制

  15. ……

图片

《鸿蒙开发实战》

  1. ArkTS实践

  2. UIAbility应用

  3. 网络案例

  4. ……

图片

 获取这份鸿蒙星河版学习资料,请点击→《鸿蒙NEXT星河版开发学习文档》

总结

鸿蒙—作为国家主力推送的国产操作系统。部分的高校已经取消了安卓课程,从而开设鸿蒙课程;企业纷纷跟进启动了鸿蒙研发

并且鸿蒙是完全具备无与伦比的机遇和潜力的;预计到年底将有 5,000 款的应用完成原生鸿蒙开发,未来将会支持 50 万款的应用那么这么多的应用需要开发,也就意味着需要有更多的鸿蒙人才。鸿蒙开发工程师也将会迎来爆发式的增长,学习鸿蒙势在必行!

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

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

相关文章

Trinamic步进电机控制模块助力抗击疟疾

疟疾是世界上最致命的传染病之一。这种疾病在亚洲、非洲和南美洲的热带地区十分常见&#xff0c;越早诊断&#xff0c;越能有效治疗。标准疟疾检测需要由训练有素的技术人员在显微镜下检测血液样本&#xff0c;以确认是否存在疟原虫&#xff0c;以及疟原虫的数量和类型。仅在印…

弱口令入侵FE企业管理平台【附口令】

漏洞描述 飞企互联-FE企业运营管理平台 druid路径弱口令&#xff0c;攻击者可能通过尝试弱口令&#xff0c;非法进入系统&#xff0c;恶意操作或者收集信息进一步攻击利用。 漏洞复现 1、Fofa app"飞企互联-FE企业运营管理平台"2、零零信安 (html_banner360浏览…

【python】基于pyttsx3库的字符串转音频文件

一、源码 import pyttsx3 engine pyttsx3.init() engine.setProperty(volume, 0.8) engine.setProperty(rate, 150) engine.save_to_file("Hello, World!", "output.mp3") engine.runAndWait()二、介绍 使用pyttsx3库&#xff0c;设置声音与速率&#x…

聊一聊一些关于npm、pnpm、yarn的事

前言 整理了最近的闲聊&#xff0c;话题是前端各个包管理器&#xff0c;如果分享的不对或者有异议的地方&#xff0c;麻烦请及时告诉我~ 耐心看完&#xff0c;也许你会有所收获~ 概述 本文阅读时间&#xff1a;10-15分钟左右&#xff1b; 难度&#xff1a;初级&#xff0c…

【回溯】Leetcode 51. N 皇后【困难】

N 皇后 按照国际象棋的规则&#xff0c;皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。 n 皇后问题 研究的是如何将 n 个皇后放置在 nn 的棋盘上&#xff0c;并且使皇后彼此之间不能相互攻击。 给你一个整数 n &#xff0c;返回所有不同的 n 皇后问题 的解决方案。…

C# Web应用调用EXE文件的一些实践

目录 需求 范例运行环境 可执行文件的设计 调用可执行文件方法 RunExecuteFile RunShellExecuteFile 方法的区别 WEB调用举例 小结 需求 最近同事使用Python开发了一款智能文字转语音的程序&#xff0c;经讨论部署在WINDOWS环境服务器下&#xff0c;因此需要生成目标…

Pytest实践:Python测试技术基础知识!

一、简介 在软件开发领域&#xff0c;确保代码的正确性和稳健性至关重要。这就是软件测试发挥作用的地方。Python 是一种通用且广泛使用的编程语言&#xff0c;提供了大量的工具和库来帮助测试过程。 其中&#xff0c;Pytest就是一个很好用的测试框架&#xff0c;可以在 Pyth…

transformer上手(3) —— 开箱即用的 pipelines

1 开箱即用的 pipelines Transformers 库将目前的 NLP 任务归纳为几下几类&#xff1a; 文本分类&#xff1a;例如情感分析、句子对关系判断等&#xff1b;对文本中的词语进行分类&#xff1a;例如词性标注 (POS)、命名实体识别 (NER) 等&#xff1b;文本生成&#xff1a;例如…

2024年MathorCup数学建模A题移动通信网络中PCI规划问题解题文档与程序

2024年第十四届MathorCup高校数学建模挑战赛 A题 移动通信网络中PCI规划问题 原题再现&#xff1a; 物理小区识别码(PCI)规划是移动通信网络中下行链路层上&#xff0c;对各覆盖小区编号进行合理配置&#xff0c;以避免 PCI 冲突、PCI 混淆以及 PCI 模3 千扰等现象。PCI 规划…

milvus各组件的结构体分析

milvus各组件的结构体分析 各组件启动&#xff0c;需要构建各组件的结构体&#xff0c;一共8个。 runComponent(ctx, localMsg, wg, components.NewRootCoord, metrics.RegisterRootCoord) runComponent(ctx, localMsg, wg, components.NewProxy, metrics.RegisterProxy) run…

lv_micropython for ESP32-C3

一、开发平台说明 硬件&#xff1a;立创实战派ESP32-C3开发板。处理器ESP32-C3&#xff08;内置400KB SRAM&#xff09;&#xff0c;无内置FLASH&#xff0c;2.0寸液晶&#xff08;液晶驱动IC:ST7789&#xff0c;触屏驱动IC:FT6336&#xff09;&#xff0c;下载口UART0。 ESP…

c++ 中文转拼音的封装, char 类型 不支持 中文 已解决

在日常业务中&#xff0c;需要进行中文转拼音的检索。已便实现对应的 模糊搜索。 使用方法 std::string res "我是中国人";char* result new char[res.length() 1];for (int i 0; i < res.length(); i){result[i] res[i];}result[res.length()] \0;std::str…

【C++第三阶段】vector容器

以下内容仅为当前认识&#xff0c;可能有不足之处&#xff0c;欢迎讨论&#xff01; 文章目录 构造函数赋值操作容量和大小插入和删除数据存取互换容器预留空间 构造函数 vector函数是常用数据结构&#xff0c;见于刷题网站。 它是单端数组&#xff0c;与普通数组区别在于可以…

【Linux】基础IO----理解缓冲区

> 作者&#xff1a;დ旧言~ > 座右铭&#xff1a;松树千年终是朽&#xff0c;槿花一日自为荣。 > 目标&#xff1a;理解缓冲区 > 毒鸡汤&#xff1a;有些事情&#xff0c;总是不明白&#xff0c;所以我不会坚持。早安! > 专栏选自&#xff1a;Linux初阶 > 望…

Aritest+python+Jenkins解放双手iOS/Android自动化

ARITest、Python 和 Jenkins 可以结合在一起创建一个自动化测试解决方案&#xff0c;实现持续集成和持续测试的目标。以下是三者如何协同工作的基本概念&#xff1a; 1. **ARITest**&#xff1a; ARITest 是一款功能全面的自动化测试工具&#xff0c;提供 UI 自动化、接口自…

独立服务器,数据安全保障:WorkPlus即时通讯为企业信息安全把关

随着手机普及率的不断增加&#xff0c;即时通讯已经成为了企业内部沟通的重要方式。WorkPlus作为一家领先的企业级即时通讯服务商&#xff0c;提供了全方位的即时通讯解决方案&#xff0c;助力企业实现沟通无障碍、协作高效率的目标。 WorkPlus提供了多样化的即时通讯功能&…

轻松解锁销售利润!使用淘宝商品关键词搜索API接口

随着电商行业的快速发展&#xff0c;如何提高销售利润成为了卖家们的关注焦点。淘宝商品关键词搜索API接口提供了一种高效的方式来帮助卖家们找到最适合的商品关键词&#xff0c;提高商品曝光率和销售量。联讯数据将全面介绍淘宝商品关键词搜索API接口的用途、优势以及如何使用…

蓝桥杯模拟赛题——魔法失灵了——toRefs()

目标 找到 index.html 中 TODO 部分&#xff0c;正确修复代码使 data 对象恢复响应式特性&#xff0c;即点击页面上的 - 与 按钮可以改变 value 的值。正确实现后效果如下&#xff1a; 题解 value是reactive 利用toRefs; toRefs() 函数可以将 reactive() 创建出来的响应式对象…

数据结构之单链表的相关知识点及应用

找往期文章包括但不限于本期文章中不懂的知识点&#xff1a; 个人主页&#xff1a;我要学编程(ಥ_ಥ)-CSDN博客 所属专栏&#xff1a;数据结构 目录 链表的概念及结构 链表与顺序表的区别与优劣势 链表的分类 单链表的实现 单链表中增加节点 单链表中尾插数据 打印单链…

《零基础入行IT:步步为营的转型攻略与实践策略》

在信息化社会&#xff0c;IT行业以其强劲的发展势头、广阔的就业前景和丰厚的薪酬待遇&#xff0c;吸引了无数希望转行或初入职场人士的目光。然而&#xff0c;对于毫无相关背景知识的人来说&#xff0c;如何成功叩开IT行业的大门&#xff0c;似乎是一项颇具挑战性的任务。本文…