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

怎么自己开一个网站哈尔滨网站关键字优化

怎么自己开一个网站,哈尔滨网站关键字优化,义乌网站建设微信开发,免费中文网站模板OpenHarmony最近一段时间#xff0c;简直火的一塌糊度#xff0c;学习OpenHarmony相关的技术栈也有一段时间了#xff0c;做个记账本小应用#xff0c;将所学知识点融合记录一下。 1、记账本涉及知识点 基础组件#xff08;Button、Select、Text、Span、Divider、Image简直火的一塌糊度学习OpenHarmony相关的技术栈也有一段时间了做个记账本小应用将所学知识点融合记录一下。 1、记账本涉及知识点 基础组件Button、Select、Text、Span、Divider、Image、容器Row、Flex、List、Grid、Column、定位position、路由router、ToastpromptAction、Web组件    自定义弹窗CustomDialog    分布式键值数据库ohos.data.distributedKVStore    Web组件    OpenHarmony三方库 2、效果预览 3、功能点实现简介 3.1 自定义弹窗 // 自定义弹窗定义 CustomDialog struct CustomDialogSetting {// 双向绑定传值Link settingBudgetValue: string// 弹窗控制器控制打开/关闭必须传入且名称必须为controllercontroller: CustomDialogController// 弹窗中的按钮事件cancel: () voidconfirm: () void// 弹窗中的内容描述build() {Column() {Text($r(app.string.budget_setting)).fontSize(18).fontWeight(FontWeight.Bold).margin(12).textAlign(TextAlign.Center).width(100%)TextInput({placeholder: $r(app.string.estimated_amount_tips),text: this.settingBudgetValue}).type(InputType.Number).height(60).width(90%).onChange((value: string) {this.settingBudgetValue value})Flex({ justifyContent: FlexAlign.SpaceAround }) {Button($r(app.string.cancel)).onClick(() {this.settingBudgetValue this.controller.close()this.cancel()}).backgroundColor(0xffffff).fontColor(Color.Black)Button($r(app.string.confirm)).onClick(() {this.controller.close()this.confirm()}).backgroundColor(0xffffff).fontColor(AccountBookConstant.FONT_COLOR_BLUE)}.margin(15)}} } // 使用自定义弹窗 dialogController: CustomDialogController new CustomDialogController({builder: CustomDialogSetting({cancel: this.onCancel.bind(this),confirm: this.onAccept.bind(this),settingBudgetValue: $settingBudgetValue}),cancel: this.onCancel,autoCancel: true,alignment: DialogAlignment.Center,gridCount: 4,customStyle: false })// 开启弹窗 this.dialogController.open() 3.2 悬浮按钮 // 设置按钮 通过position进行绝对定位 Button({ stateEffect: true }){Image($rawfile(setting.svg)).width(22).height(22) }.width(42).height(42) .borderRadius(90) .shadow({ radius: 10, color: Color.Gray, offsetX: 5, offsetY:5 }) .position({ x: 98%, y: 98% }) .markAnchor({ x: 98%, y: 98%}) .margin(10).backgroundColor(#67C23A) .onClick(() {if (this.dialogController ! undefined) {this.dialogController.open()} }) 3.3  数据存储 // 定义键值对存储类import distributedKVStore from ohos.data.distributedKVStore;const BUNDLE_NAME baseInfolet context getContext(this) // 数据库对象 let kvManager: distributedKVStore.KVManager | undefined undefined; // KVStore数据库 let kvStore: distributedKVStore.SingleKVStore | undefined undefined;class DistributedUtil {constructor() {this.createKeyValueDB();}async getKvManager(bundleName?: string) {const kvStoreConfig: distributedKVStore.KVManagerConfig {context: context,bundleName: bundleName || BUNDLE_NAME};try {kvManager distributedKVStore.createKVManager(kvStoreConfig);}catch (err) {console.error(error:${err})}}// 创建并得到指定类型的KVStore数据库async createKeyValueDB(op?: distributedKVStore.Options) {if (!kvManager) {await this.getKvManager();}try {const options: distributedKVStore.Options {// 当数据库文件不存在时是否创建数据库默认为truecreateIfMissing: true,// 设置数据库文件是否加密默认为false即不加密encrypt: false,// 设置数据库文件是否备份默认为true即备份backup: false,// 设置数据库文件是否自动同步。默认为false即手动同步autoSync: true,// kvStoreType不填时默认创建多设备协同数据库kvStoreType: distributedKVStore.KVStoreType.SINGLE_VERSION,// 多设备协同数据库kvStoreType: distributedKVStore.KVStoreType.DEVICE_COLLABORATION,securityLevel: distributedKVStore.SecurityLevel.S1};kvManager.getKVStoredistributedKVStore.SingleKVStore(storeId, op || options, (err, store: distributedKVStore.SingleKVStore) {if (err) {console.error(Failed to get KVStore: Code:${err.code},message:${err.message});return;}console.info(Succeeded in getting KVStore.);kvStore store;});} catch (e) {console.error(An unexpected error occurred. Code:${e.code},message:${e.message});}return kvStore;}// 删除指定键值的数据async deleteStoreData(key: string) {if (!kvStore) {return;}try {kvStore.delete(key, (err) {if (err ! undefined) {console.error(Failed to delete data. Code:${err.code},message:${err.message});return;}console.info(Succeeded in deleting data.);});} catch (e) {console.error(An unexpected error occurred. Code:${e.code},message:${e.message});}}// 向键值数据库中插入数据async putStoreData(key: string, value: any) {if (!key || !value) {return}if(!kvStore) {kvStore await this.createKeyValueDB();}try {kvStore.put(key, value, (err) {if (err ! undefined) {console.error(Failed to put data. Code:${err.code},message:${err.message});return;}console.info(Succeeded in putting data.);});} catch (e) {console.error(putStoreDataAn unexpected error occurred. Code:${e.code},message:${e.message});}}// 获取指定键的值async getStoreData(key: string) {if (!key) {return}if(!kvStore) {kvStore await this.createKeyValueDB();}return new Promise((resolve, reject) {try {kvStore.get(key, (err, data) {if (err ! undefined) {console.error(Failed to get data. Code:${err.code},message:${err.message});reject(err)return;}resolve(data)});} catch (err) {reject(err)console.error(TAG-getStoreData, Failed to get value, Cause: ${err})}});} }export default new DistributedUtil(); // 使用键值对存储 import distributedUtil from ../../common/distributedStrong // 1、增加 distributedUtil.putStoreData(amountRecords, JSON.stringify(dataArray)) // 2、 获取 distributedUtil.getStoreData(amountRecords).then((res: string) {if(res) {const result JSON.parse(res)// 处理存储的图片资源会自动转换为id的形式无法直接获取展示result.map(item {item.icon $rawfile(item.icon.params[0])return item})this.recordsArray result} }) 3.4 统计图表 3.4.1 定义本地html文件 在resources下创建rawfile文件夹增加chart.html文件 !DOCTYPE html html headmeta charsetutf-8title柱状图示例/titlescript src./js/echarts5.4.0.js/script /head body h1本月支出/h1 div idchartBarContainer stylewidth: 400px; height: 300px;/divdiv idchartPieContainer stylewidth: 400px; height: 300px;/div/body scriptfunction initBarChart(chartData) {const data JSON.parse(chartData);var chartContainer document.getElementById(chartBarContainer);var chart echarts.init(chartContainer);var option {tooltip: {trigger: axis,axisPointer: {type: shadow}},xAxis: {type: category,data: data.xAxisData},yAxis: {type: value},series: [{data: data.seriesData,type: bar,showBackground: true,stack: Total,label: {show: true,position: top},emphasis: {itemStyle: {color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [{ offset: 0, color: #2378f7 },{ offset: 0.7, color: #2378f7 },{ offset: 1, color: #83bff6 }])}},itemStyle: {borderRadius: [25, 25, 0, 0],color: new echarts.graphic.LinearGradient(0, 0, 0, 1, [{ offset: 0, color: #83bff6 },{ offset: 0.5, color: #188df0 },{ offset: 1, color: #188df0 }])}}]};chart.setOption(option);}function initPieChart(chartData) {const data JSON.parse(chartData);var chartContainer document.getElementById(chartPieContainer);var chart echarts.init(chartContainer);var option {tooltip: {trigger: item},legend: {show: false,top: 5%,left: center},series: [{data: data.seriesData,type: pie,radius: [40%, 70%],avoidLabelOverlap: false,itemStyle: {borderRadius: 10,borderColor: #fff,borderWidth: 2},startAngle: 180,labelLine: {show: true,length: 20, // 标签线的长度length2: 50 // 标签线的第二段长度},emphasis: {label: {show: true,fontSize: 40,fontWeight: bold}},labelLine: {show: false}}]};chart.setOption(option);} /script /html 3.4.2 Web组件使用本地文件 import web_webview from ohos.web.webviewEntry Component struct Chart {controllerWeb: web_webview.WebviewController new web_webview.WebviewController()build() {Web({ src: $rawfile(barChart.html), controller: this.controllerWeb })} }3.4.3 Web组件向H5页面传值调用H5中的方法 // 初始化柱状图 const codeJS initBarChart(${JSON.stringify(this.chartBarData)})this.controllerWeb.runJavaScript(codeJS) 3.4.4 完整调用代码 import web_webview from ohos.web.webview import router from ohos.router;interface ChartDataType {xAxisData?: Arraystring | number;seriesData?: Arraystring | number | any; }Entry Component struct BarChart {controllerWeb: web_webview.WebviewController new web_webview.WebviewController()private chartBarData: ChartDataType {xAxisData: [餐饮, 购物, 教育, 生活, 宠物, 运动, 娱乐, 其他],seriesData: [10, 20, 15, 30, 10, 20, 15, 30],}private chartPieData: ChartDataType {seriesData: [{ value: 10, name: 餐饮 },{ value: 20, name: 购物 },{ value: 15, name: 教育 },{ value: 30, name: 生活 },{ value: 10, name: 宠物 },{ value: 20, name: 运动 },{ value: 15, name: 娱乐 },{ value: 30, name: 其他 },],}build() {Column() {Row() {Button() {Image($rawfile(icon_back.png)).width(18)}.backgroundColor(Color.Transparent).padding(10).onClick(() router.back())Text(图表分析).fontSize(20).fontWeight(FontWeight.Bold)}.padding(10).justifyContent(FlexAlign.SpaceBetween).width(100%)Web({ src: $rawfile(barChart.html), controller: this.controllerWeb }).verticalScrollBarAccess(true).javaScriptAccess(true).onPageEnd(() {// 初始化柱状图const codeJS initBarChart(${JSON.stringify(this.chartBarData)})this.controllerWeb.runJavaScript(codeJS)// 初始化饼图const codeJSPie initPieChart(${JSON.stringify(this.chartPieData)})this.controllerWeb.runJavaScript(codeJSPie)})}.width(100%).height(100%)} } 3.4.5 传值注意点总结 传递数据需要通过 JSON.stringify() 转换为字符串传递的参数必须使用引号包裹否则无法调用到H5中的方法H5中使用传过来的数据同理需要使用 JSON.parse() 进行转换 3.5  自定义键盘 使用Grid布局通过rowStart、rowEnd、columnStart、columnEnd进行单元格合并。或者使用column和row布局循环即可。 参考https://gitee.com/harmonyos/codelabs/tree/master/SimpleCalculator Grid() {GridItem() {this.GridItemButtonBuilder(7)}.gridItemStyle().onClick(() { this.clickBtn(7) })GridItem() {this.GridItemButtonBuilder(8)}.gridItemStyle().onClick(() { this.clickBtn(8) })GridItem() {this.GridItemButtonBuilder(9)}.gridItemStyle().onClick(() { this.clickBtn(9) })GridItem() {Text(this.time).backgroundColor(Color.White).width(100%).height(100%).textAlign(TextAlign.Center)}.gridItemStyle()GridItem() {this.GridItemButtonBuilder(4)}.gridItemStyle().onClick(() { this.clickBtn(4) })GridItem() {this.GridItemButtonBuilder(5)}.gridItemStyle().onClick(() { this.clickBtn(5) })GridItem() {this.GridItemButtonBuilder(6)}.gridItemStyle().onClick(() { this.clickBtn(6) })GridItem() {this.GridItemButtonBuilder(remove)}.gridItemStyle().onClick(() { this.clickBtn(remove) })GridItem() {this.GridItemButtonBuilder(1)}.gridItemStyle().onClick(() { this.clickBtn(1) })GridItem() {this.GridItemButtonBuilder(2)}.gridItemStyle().onClick(() { this.clickBtn(2) })GridItem() {this.GridItemButtonBuilder(3)}.gridItemStyle().onClick(() { this.clickBtn(3) })GridItem() {this.GridItemButtonBuilder(保存, #409EFF)}.rowStart(2).rowEnd(3).columnStart(3).columnEnd(4).onClick(() { this.clickBtn(save) })GridItem() {this.GridItemButtonBuilder(清空)}.gridItemStyle().onClick(() { this.clickBtn(clear) })GridItem() {this.GridItemButtonBuilder(0)}.gridItemStyle().onClick(() { this.clickBtn(0) })GridItem() {this.GridItemButtonBuilder(.)}.gridItemStyle().onClick(() { this.clickBtn(.) }) } .height(220) .columnsTemplate(1fr 1fr 1fr 1fr) .rowsTemplate(1fr 1fr 1fr 1fr) .rowsGap(0) .margin({ top: 0 }) 4、扩展如何使用基础组件自定义柱状图 使用Stack容器进行堆叠通过Rect绘制柱子通过Divider绘制分割线 一个简单的柱状图就完成了具体可以参考健康生活希望ArkUI可以早日集成Echarts类似的图表组件JS版本的有Chart组件ArkTs的还未集成期待官方❤️❤️❤️ Builder content(item: OneMealStatisticsInfo) {Column() {if (item.totalFat 0) {Rect({ width: 14, height: item.totalFat / 200 14, radius: 7 }).fill(#FD9A42).padding({ top: 14 }).margin({ bottom: -28 })}if (item.totalProtein 0) {Rect({ width: 14, height: item.totalProtein / 200 14, radius: 7 }).fill(#FBD44E).padding({ top: 14 }).margin({ bottom: -21 })}if (item.totalCarbohydrates 0) {Rect({ width: 14, height: item.totalCarbohydrates / 200 14, radius: 7 }).fill(#73CD57).padding({ top: 7 }).margin({ bottom: -7 })}}.clip(true)}Builder legendComponent(item: HistogramLegend) {Text(item.value).fontSize(12).fontColor(#18181A).fontFamily(HarmonyHeTi) }Component struct Histogram {Consume(dietData) dietData: ArrayOneMealStatisticsInfoBuilderParam content?: (item: OneMealStatisticsInfo) voidBuilderParam legendComponent?: (item: HistogramLegend) voidprivate title: string | Resource private legend: HistogramLegend[] []build() {Column() {Text(this.title).textAlign(TextAlign.Start).fontSize(24).fontColor(#000000).fontFamily(HarmonyHeTi-Medium).width(100%).height(46)Stack({ alignContent: Alignment.Bottom }) {Column() {ForEach([0, 0, 0, 0, 0, 0], () {Divider().strokeWidth(1).color(#D8D8D8)})}.height(100%).margin({ top: 20 }).justifyContent(FlexAlign.SpaceBetween)Column() {Flex({ direction: FlexDirection.Row, justifyContent: FlexAlign.SpaceEvenly, alignItems: ItemAlign.Start }) {ForEach(this.dietData, (item: OneMealStatisticsInfo) {if (item.mealFoods.length 1) {Column() {if (this.content ! undefined) {this.content(item)}Text(item.mealTime.name).fontSize(14).fontColor(#7E7E7E).fontFamily(HarmonyHeTi).margin({ top: 10 })}.justifyContent(FlexAlign.End).height(100%)}})}}.height(236)}.height(190)Row() {ForEach(this.legend, (item: HistogramLegend) {Row() {Rect({ width: 9, height: 9, radius: 9 }).fill(item.color).margin({ right: 18 })if (this.legendComponent ! undefined) {this.legendComponent(item)}}})}.justifyContent(FlexAlign.SpaceEvenly).width(100%).margin({ top: 70 })}.height(100%).padding({ left: 32, right: 32 }).borderRadius(12).backgroundColor(#FFFFFF)} } 后面计划基于canvas基础组件实现一个柱状图不断学习期望鸿蒙不断强大完善。
http://www.dnsts.com.cn/news/222346.html

相关文章:

  • 郑州专业制作网站多少钱投票活动网站怎么做
  • 网站建设都需学哪些做个网站怎样做的
  • 提升学历最快是哪种方式谷歌seo零基础教程
  • 企业网站开发背景则么写最新清远发布
  • 恩施网站建设模板网站建社石家庄
  • 网站开发和oa有什么区别中博建设集团有限公司网站
  • 济南网站开发xywlcn搭建wordpress靶机
  • 哪个网站可以做平面兼职建筑网校有哪些
  • 全国好的深圳网站设计广州建筑公司招聘
  • 中小企业网站建设服务做海报的素材哪个网站
  • 免费建站系统怎么用手机怎么制作游戏
  • 蚂蜂窝网站源码制作网页的基本步骤记事本
  • 公司网站建设费用会计入账制作灯笼的材料和做法
  • 清廉桂林网站注册网站域名后免费建站
  • 上海长宁网站建设网站制作关键字排名
  • 福州建设网站效果图旅游电子商务的网站建设
  • 企业摄影网站模板网站栏目建设存在的问题
  • 网站 售前重庆装修公司电话
  • 做网站主要注意些什么问题如何在百度发广告推广
  • 网站上怎么做星星评分建设网站宣传页
  • 网站规划包含哪些内容无锡做网站公司有哪些电话
  • 国外网站做问卷淘宝店铺购买的服务在哪里
  • 网站建设捌金手指花总三深圳好的网站建
  • 集团门户网站建设方案 php温州网络问政
  • 网站建设原理与实践即时灵感网站
  • 保定网站建设哪家好分享网站模板
  • 苏州免费自助建站网站建设如何用万网做自己的网站
  • 信阳做网站的建设网站应该怎么做
  • 做八年级题目的网站新网站多久收录
  • 学做网站设计wordpress中文cms