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

企业网站优化湖南网站建设推荐

企业网站优化,湖南网站建设推荐,厦门做网站优化价格,做旅游游客产品的网站鸿蒙主流路由详解 Navigation Navigation更适合于一次开发,多端部署,也是官方主流推荐的一种路由控制方式,但是,使用起来入侵耦合度高,所以,一般会使用HMRouter,这也是官方主流推荐的路由 Navigation官网地址 个人源码地址 路由跳转 第一步-定义路由栈 Provide(PageInfo) pag…

鸿蒙主流路由详解

Navigation

第1页-1

Navigation更适合于一次开发,多端部署,也是官方主流推荐的一种路由控制方式,但是,使用起来入侵耦合度高,所以,一般会使用HMRouter,这也是官方主流推荐的路由

Navigation官网地址

个人源码地址

路由跳转

第一步-定义路由栈
  @Provide('PageInfo') pageInfo: NavPathStack = new NavPathStack()
第二步-定义页面跳转构造函数

统一写在主页面

  @BuilderPageMap(name: string) {if (name === "NavDestinationTitle1") {pageOneTmp() // 自定义组件} else if (name === "NavDestinationTitle2") {pageTwoTmp() // 自定义组件} else if (name === "NavDestinationTitle3") {pageThreeTmp() // 自定义组件}}

分开写在子页面

这种方法,需要自定义路由表,这也是跨包路由所必须的

路由表配置:

  1. 在跳转目标模块的配置文件module.json5添加路由表配置:

      {"module" : {"routerMap": "$profile:route_map"}}
    
  2. 添加完路由配置文件地址后,需要在工程resources/base/profile中创建route_map.json文件。添加如下配置信息:

      {"routerMap": [{"name": "PageOne", // 子组件名称"pageSourceFile": "src/main/ets/pages/PageOne.ets", // 子组件地址"buildFunction": "PageOneBuilder", // 字组件构造函数"data": {"description" : "this is PageOne" // 描述}}]}
    
  3. 填写构造函数

    @Builder
    export function pageOneTmpBuilder(){pageOneTmp()
    }
    
第三步-进行页面跳转

这里只介绍常用简单的跳转方式

不带参数跳转

// 路由表在主页面
this.pageInfo.pushPathByName(`NavDestinationTitle${index}`, null) // 第一个参数是地址,第二个参数是数据
// 路由表是 router_map.json
this.pageInfo.pushPathByName('pageOneTmp', null) // 第一个参数是地址,第二个参数是数据

带参数跳转

// 路由表在主页面
let loginParam:LoginParam = new LoginParam("张三","男", 18) // LoginParam自定义类型
this.pageInfo.pushPathByName(`NavDestinationTitle${index}`,loginParam) // 第一个参数是地址,第二个参数是数据
// 路由表是 router_map.json
let loginParam:LoginParam = new LoginParam("张三","男", 18) // LoginParam自定义类型
this.pageInfo.pushPathByName(`pageOneTmp`,loginParam) // 第一个参数是地址,第二个参数是数据

参数解析

// 子页面
// 获得所有NavDestination的名称
let params:string[] = this.pageInfos.getAllPathName()
console.log(TAG,'所有页面名称',JSON.stringify(params))// 通过Index获取参数
let obj = this.pageInfos.getParamByIndex(0) as LoginParam
console.log(TAG,'来源页面参数',JSON.stringify(obj))// 通过名称获取参数(一般路由栈顶端的就是当前页面,params[params.length-1]可以路由栈栈顶名称)
let params2 = this.pageInfos.getParamByName(params[params.length-1])[0] as LoginParam
console.log(TAG,'来源页面参数',JSON.stringify(params2))

带参返回

// 子页面,可以放在onRead()方法里面接收,也可以放在aboutToAppear()方法里面接收
// 获得所有NavDestination的名称
let params:string[] = this.pageInfos.getAllPathName()
console.log(TAG,'所有页面名称',JSON.stringify(params))// 通过Index获取参数
let obj = this.pageInfos.getParamByIndex(0) as LoginParam
console.log(TAG,'来源页面参数',JSON.stringify(obj))// 通过名称获取参数(一般路由栈顶端的就是当前页面,params[params.length-1]可以路由栈栈顶名称)
let params2 = this.pageInfos.getParamByName(params[params.length-1])[0] as LoginParam
console.log(TAG,'来源页面参数',JSON.stringify(params2))
// 带参返回
this.pageInfos.pop(obj,true)

主页面解析子页面参数

// 解析参数
let loginParam:LoginParam = new LoginParam("张三","男", 18) // LoginParam自定义类型
this.pageInfo.pushPathByName(`NavDestinationTitle${index}`,loginParam,(popInfo)=>{console.log(TAG,`NavDestinationTitle${index}返回信息`,JSON.stringify(popInfo.result))
}) // 第一个参数是地址,第二个参数是数据,第三个处理子页面返回的参数

路由拦截

第一步-定义路由栈
  @Provide('PageInfo') pageInfo: NavPathStack = new NavPathStack()
第二步-定义页面跳转构造函数
  @BuilderPageMap(name: string) {if (name === "NavDestinationTitle1") {pageOneTmp() // 自定义组件} else if (name === "NavDestinationTitle2") {pageTwoTmp() // 自定义组件} else if (name === "NavDestinationTitle3") {pageThreeTmp() // 自定义组件}}
第三步-进行页面跳转并进行拦截
// 解析参数
let loginParam: LoginParam = new LoginParam("张三", "男", 18) // LoginParam自定义类型
this.pageInfo.pushPathByName(`NavDestinationTitle${index}`, loginParam, (popInfo) => {console.log(TAG, `NavDestinationTitle${index}返回信息`, JSON.stringify(popInfo.result))
}) // 第一个参数是地址,第二个参数是数据,第三个处理子页面返回的参数// 路由拦截
this.pageInfo.setInterception({willShow: (from: NavDestinationContext | "navBar", to:NavDestinationContext | "navBar",operation: NavigationOperation, animated: boolean) => {if (typeof to === "string") {console.log("target page is navigation home page.");return;}// 将跳转到PageTwo的路由重定向到PageOnelet target: NavDestinationContext = to asNavDestinationContext;console.log(TAG, '当前要跳转界面', target.pathInfo.name)if (target.pathInfo.name === 'NavDestinationTitle1') {target.pathStack.pop();target.pathStack.pushPathByName('NavDestinationTitle2', null);}}
})

生命周期

第10页-7

对比

第13页-9

第13页-8

HmRouter

这种路由方式进行了解耦,不用再去写Build函数,它是基于自定义注解的方式,进行路由跳转,这也是官方推荐的方式

官网地址

个人源码地址

基础配置

第一步-使用ohpm安装依赖
ohpm install @hadss/hmrouter   // 路由框架
ohpm install @hadss/hmrouter-transitions   // 高阶转场动画库,依赖路由框架(可选)
第二步-拷贝artifacts到工程目录libs文件(需要自己创建)
第三步-修改oh-package.json5(entry目录切记)

报错的话重新输入路径

{"dependencies": {"@hadss/hmrouter": "file: ../libs/HMRouterLibrary-${version}.har","@hadss/hmrouter-transitions": "file: ../libs/HMRouterTransitions-${version}.har"}
}
第四步-修改工程的hvigor/hvigor-config.json文件
{"dependencies": {"@hadss/hmrouter-plugin": "file: ../libs/hadss-hmrouter-plugin-${version}.tgz"// 使用npm仓版本号}
}
第五步-在模块中引入路由编译插件,修改 hvigorfile.ts
import { hapTasks } from '@ohos/hvigor-ohos-plugin';
import { hapPlugin } from '@hadss/hmrouter-plugin';
//管理HMRouter这个对象的,根据报的类型修改hapPlugin
export default {system: hapTasks, /* Built-in plugin of Hvigor. It cannot be modified. */plugins:[hapPlugin()] /* Custom plugin to extend the functionality of Hvigor. */
}
第六步-可选配置hmrouter_config.json(自己在工程目录下创建)

插件扫描指定目录下的文件,动态的生成被包装好的页面对象

{"scanDir": ["src/main/ets/components","src/main/ets/interceptors"],"saveGeneratedFile": true
}
第七步-工程配置在工程目录下的build-profile.json5
"buildOption": {"strictMode": {"caseSensitiveCheck": true,"useNormalizedOHMUrl": true}
}

使用

第一步-初始化 onCreate()

在UIAbility或者启动框架AppStartup中初始化路由框架

export default class EntryAbility extends UIAbility {onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {HMRouterMgr.init({context: this.context})}
}
第二步-主界面

自定义主界面样式

/*** 自定义主界面样式*/
class NavModifier extends AttributeUpdater<NavigationAttribute> {initializeModifier(instance: NavigationAttribute): void {instance.mode(NavigationMode.Stack);instance.navBarWidth('100%');instance.hideTitleBar(true);instance.hideToolBar(true);}
}

主界面使用

import { HMDefaultGlobalAnimator, HMNavigation } from '@hadss/hmrouter';
import { AttributeUpdater } from '@kit.ArkUI';@Entry
@Component
struct Index {modifier: NavModifier = new NavModifier()build() {Column() {HMNavigation({navigationId:'mainNavigation',homePageUrl:'PageA', // 设置主页options:{standardAnimator:HMDefaultGlobalAnimator.STANDARD_ANIMATOR,dialogAnimator:HMDefaultGlobalAnimator.DIALOG_ANIMATOR,modifier:this.modifier // 设置页面风格}}){Button('点我')}}.height('100%').width('100%')}
}/*** 自定义主界面样式*/
class NavModifier extends AttributeUpdater<NavigationAttribute> {initializeModifier(instance: NavigationAttribute): void {instance.mode(NavigationMode.Stack);instance.navBarWidth('100%');instance.hideTitleBar(true);instance.hideToolBar(true);}
}
第三步-可选配置拦截器
import { HMInterceptor, HMInterceptorAction, HMInterceptorInfo, IHMInterceptor } from "@hadss/hmrouter";const TAG = '[JumpInfoInterceptor]'@HMInterceptor({ interceptorName: 'JumpInfoInterceptor', global: true })
export class JumpInfoInterceptor implements IHMInterceptor {handle(info: HMInterceptorInfo): HMInterceptorAction {/*** export interface HMInterceptorInfo {* srcName: string;*  targetName?: string;*  isSrc?: boolean;*  type: HMActionType;*  routerPathInfo: HMRouterPathInfo;*  routerPathCallback?: HMRouterPathCallback;*  context: UIContext;* }* 可以根据自己的需求,配置拦截信息*/let connectionInfo: string = info.type === 'push' ? 'jump to' : 'back to';console.info(TAG,'输出信息为',`${info.srcName} ${connectionInfo} ${info.targetName}`)return HMInterceptorAction.DO_NEXT;}
}
第四步-路由跳转

不带拦截器的跳转

import { HMRouter, HMRouterMgr } from '@hadss/hmrouter';const TAG = '[PageC]'@HMRouter({pageUrl:'PageC'})
@Component
export struct PageC {aboutToAppear(): void {let param = HMRouterMgr.getCurrentParam()console.log(TAG,'PageC的接收参数为',JSON.stringify(param))}build() {Column({space:20}){Button('PageC').onClick(()=>{HMRouterMgr.pop({pageUrl:'PageC',param:'这是来自于C的数据'})})}}
}

带拦截器的跳转

import { HMRouter, HMRouterMgr } from "@hadss/hmrouter";const TAG = '[PageB]'@HMRouter({pageUrl:'PageB',interceptors:['JumpInfoInterceptor']})
@Component
export struct PageB {aboutToAppear(): void {let param = HMRouterMgr.getCurrentParam()console.log(TAG,'PageB的接收参数为',JSON.stringify(param))}build() {Column(){Button('PageB==>pop').onClick(()=>{HMRouterMgr.pop({pageUrl:'PageA',param:'这是来自于B的数据'})})Button('PageB==>push').onClick(()=>{HMRouterMgr.push({pageUrl:'PageC',param:'这是来自于B的数据'})})}}
}

文章转载自:
http://carrollian.pqbz.cn
http://deltawinged.pqbz.cn
http://knuckler.pqbz.cn
http://prudence.pqbz.cn
http://zabaglione.pqbz.cn
http://pentecostal.pqbz.cn
http://elint.pqbz.cn
http://nonimportation.pqbz.cn
http://dissoluble.pqbz.cn
http://moneybags.pqbz.cn
http://bestowal.pqbz.cn
http://crustless.pqbz.cn
http://cappelletti.pqbz.cn
http://decalcomania.pqbz.cn
http://metamale.pqbz.cn
http://caseharden.pqbz.cn
http://lancinate.pqbz.cn
http://comix.pqbz.cn
http://strisciando.pqbz.cn
http://revaccinate.pqbz.cn
http://inhere.pqbz.cn
http://synoecism.pqbz.cn
http://exiguity.pqbz.cn
http://acoumeter.pqbz.cn
http://topline.pqbz.cn
http://thromboembolism.pqbz.cn
http://palmyra.pqbz.cn
http://hispanic.pqbz.cn
http://stronger.pqbz.cn
http://upstage.pqbz.cn
http://hieroglyph.pqbz.cn
http://unrig.pqbz.cn
http://jealousness.pqbz.cn
http://histocompatibility.pqbz.cn
http://luteinize.pqbz.cn
http://neuromast.pqbz.cn
http://cokehead.pqbz.cn
http://platitudinal.pqbz.cn
http://cordelle.pqbz.cn
http://importability.pqbz.cn
http://discontented.pqbz.cn
http://overshoe.pqbz.cn
http://reindustrialization.pqbz.cn
http://reveller.pqbz.cn
http://chicquest.pqbz.cn
http://dermatography.pqbz.cn
http://monecious.pqbz.cn
http://sensa.pqbz.cn
http://plenipotence.pqbz.cn
http://detinue.pqbz.cn
http://kennetic.pqbz.cn
http://regretfully.pqbz.cn
http://triradiate.pqbz.cn
http://rheidity.pqbz.cn
http://coo.pqbz.cn
http://template.pqbz.cn
http://antithrombotic.pqbz.cn
http://wishfully.pqbz.cn
http://maxilliped.pqbz.cn
http://otoscope.pqbz.cn
http://linkman.pqbz.cn
http://mohair.pqbz.cn
http://encomiastic.pqbz.cn
http://coalescence.pqbz.cn
http://motivate.pqbz.cn
http://sergeantship.pqbz.cn
http://doukhobors.pqbz.cn
http://riot.pqbz.cn
http://deadness.pqbz.cn
http://capricornian.pqbz.cn
http://intimation.pqbz.cn
http://incontestable.pqbz.cn
http://deaconess.pqbz.cn
http://fcc.pqbz.cn
http://malposed.pqbz.cn
http://redistrict.pqbz.cn
http://telekinesis.pqbz.cn
http://macrame.pqbz.cn
http://raggie.pqbz.cn
http://biometricist.pqbz.cn
http://workroom.pqbz.cn
http://preselective.pqbz.cn
http://cedar.pqbz.cn
http://benefactive.pqbz.cn
http://vagabondism.pqbz.cn
http://deliberatively.pqbz.cn
http://rut.pqbz.cn
http://shapelessly.pqbz.cn
http://flipper.pqbz.cn
http://crepuscule.pqbz.cn
http://trawler.pqbz.cn
http://cabalistic.pqbz.cn
http://photoperiod.pqbz.cn
http://sighthole.pqbz.cn
http://swinglebar.pqbz.cn
http://detector.pqbz.cn
http://chinovnik.pqbz.cn
http://nidamental.pqbz.cn
http://seajack.pqbz.cn
http://backmarker.pqbz.cn
http://www.dt0577.cn/news/93899.html

相关文章:

  • 杭州网站建设推广百度小说排行榜风云榜
  • 株洲人才网官网陕西整站关键词自然排名优化
  • 黄江镇做网站淘宝怎么优化关键词步骤
  • 英文网站收录提交深圳关键词自动排名
  • 威海网站设计公司网络营销的流程和方法
  • 做网站爬闪个人网站制作
  • 群晖系统可以做网站吗百度旅游官网
  • 绵阳做网站公司网络营销推广是做什么的
  • 做网站定金交多少合适福州seo技术培训
  • 网站的在线qq客服链接怎么做指数运算法则
  • 做网站交互效果用什么软件设计网站都有哪些
  • 查询网站域名手机优化软件哪个好
  • 网络营销导向企业网站建设的原则包括汕头seo
  • 打开ecshop网站提示内容溢出爱站网seo培训
  • 宽带开户多少钱360优化大师最新版
  • 南京小程序网站开发文案代写平台
  • 网站开发维护的工作职责今日百度小说排行榜
  • 网站程序语言汕头最好的seo外包
  • 城投公司企业文化建设旺道seo网站优化大师
  • 网站建设话术域名交易平台
  • dedecms网站的下载百度竞价客服
  • app 官方网站 案例seo标题优化的心得总结
  • 成都网站定制正规淘宝代运营去哪里找
  • 钓鱼博彩网站怎么做百度页面推广
  • 宜春制作网站公司哪家好怎么做网站广告
  • 滨州医学院做计算机作业的网站广州各区进一步强化
  • 务川网站建设营销推广软文案例
  • 做短袖的网站重庆seo俱乐部联系方式
  • 电子商务公司网站建立前期准备小程序开发制作
  • 网站的排名优化怎么做网站收录提交入口大全