您现在的位置是:亿华云 > IT科技类资讯
鸿蒙的JS开发部模式14:tabs组件通过Python远程服务构建项目一
亿华云2025-10-08 23:27:52【IT科技类资讯】0人已围观
简介想了解更多内容,请访问:和华为官方合作共建的鸿蒙技术社区https://harmonyos.51cto.com/#zz1.DevEco Studio的最新版开发工具新增预览和调试真的很好用.通过对鸿蒙
想了解更多内容,鸿蒙请访问:
和华为官方合作共建的发部服务鸿蒙技术社区
https://harmonyos.51cto.com/#zz
1.DevEco Studio的最新版开发工具新增预览和调试真的很好用.通过对鸿蒙的tabs和tab-bar组件,tab-content组件动态生成,通过fetch请求python flask服务构建,模式效果图如下:

2.python的组件代码如下,提供了远程的通过web服务,亿华云同时通过反向代理服务器nginx提供图片等静态资源的远程服务:
from flask import Flask from flask import jsonify from flask import request import json app=Flask(__name__) @app.route("/data") def execData(): print("用户发起data的请求,执行execData方法") data1=("许金扉",构建"李永毅","昌立昊") return jsonify(data1) @app.route("/querybyname",methods=["POST"]) def queryByName(): if request.method == POST: print("用户发起querybyname的请求,执行queryByName方法") #data2={ "许金扉":"一个女学生",项目"李永毅":"一个扬州的男学生","昌立昊":"一个南京的男学生"} data2 = { "许金扉":{ "text":"女学生","img":"common/customer.png"}, "李永毅": { "text":"男学生","img":"common/emp.png"}, "昌立昊": { "text":"男学生","img":"common/emp.png"}} # name=request.form.get("cname") # print(name) info=request.get_data(as_text=True) print(info) print(type(info)) name=json.loads(info).get("cname") info1=data2.get(name) return jsonify(info1) @app.route("/loadmenu",methods=["GET"]) def loadMenu(): if request.method=="GET": print("加载首页菜单") menudatas=[{ "text":"首页","selectIcon":"http://lixin.free.idcfengye.com/images/ones.png", "icon":"http://lixin.free.idcfengye.com/images/oneu.png"}, { "text":"分类","selectIcon":"http://lixin.free.idcfengye.com/images/cs.png", "icon":"http://lixin.free.idcfengye.com/images/cu.png"}, { "text":"阅读","selectIcon":"http://lixin.free.idcfengye.com/images/rs.png", "icon":"http://lixin.free.idcfengye.com/images/ru.png"}, { "text":"我的","selectIcon":"http://lixin.free.idcfengye.com/images/mys.png", "icon":"http://lixin.free.idcfengye.com/images/myu.png"}] return jsonify(menudatas) if __name__=="__main__": app.run(debug=True,port=8500)3.鸿蒙的远程请求python flask服务,服务器租用需要使用内网穿透工具

4.同时启动nginx服务和ngrok的鸿蒙内网穿透


5.鸿蒙的业务逻辑层通过配置网络权限和域名安全审核

5.鸿蒙js的业务逻辑层代码
import fetch from @system.fetch; import prompt from @system.prompt; export default { data: { title: World, currentIndex:0, menudatas:[] }, onInit(){ fetch.fetch({ url:"http://aeawqk.natappfree.cc/loadmenu", method:"GET", responseType:"json", success:(resp)=> { this.menudatas=JSON.parse(resp.data); } }); }, onShow(){ prompt.showToast({ message:"正在加载数据,请稍后",发部服务 duration:5000 }); }, changeview(e) { let cIndex=e.index; this.currentIndex=cIndex; } }6.视图层代码
<div class="container"> <tabs class="tabs" index="{ { currentIndex}}" onchange="changeview" vertical="false" > <tab-bar class="tab-bar" mode="fixed"> <block for="{ { menudatas}}"> <div class="menuview"> <image class="cimg" src="{ { currentIndex==$idx?$item.selectIcon:$item.icon}}"></image> <text class="{ { currentIndex==$idx?stxt:dtxt}}">{ { $item.text}}</text> </div> </block> </tab-bar> <tab-content class="tab-content"> <div class="oneview"> </div> <div class="twoview"> </div> <div class="threeview"> </div> <div class="fourview"> </div> </tab-content> </tabs> </div>7.样式代码
.container { display: flex; flex-direction: column; width: 100%; } .tabs{ width: 100%; } .tab-bar{ width: 100%; height: 12%; border-top: 10px solid silver; position: fixed; left: 0px; bottom: 0px; z-index:999; background-color: snow; } .menuview{ width: 100%; height: 100%; /**border: 5px solid black;**/ display: flex; flex-direction: column; align-items: center; padding: 15px; } .cimg{ width: 70px; height: 70px; } .tab-content{ width: 100%; } .oneview{ width: 100%; height: 100%; background-color: palegreen; } .twoview{ width: 100%; height: 100%; background-color: palegoldenrod; } .threeview{ width: 100%; height: 100%; background-color: papayawhip; } .fourview{ width: 100%; height: 100%; background-color: powderblue; } .stxt{ color: black; } .dtxt{ color: silver; }8.底部菜单栏通过三元运算符,进行切换,模式效果如下:
想了解更多内容,组件请访问:
和华为官方合作共建的通过鸿蒙技术社区
https://harmonyos.51cto.com/#zz
很赞哦!(6)