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

上海网站建设基础seo工资服务

上海网站建设基础,seo工资服务,做软件开发有前途吗,广州服务器托管背景 随着CSDN 鸿蒙APP 业务功能的增加,以及为了与iOS、Android 端统一页面跳转路由,以及动态下发路由链接,路由重定向等功能。鸿蒙动态路由方案的实现迫在眉睫。 实现方案 鸿蒙版本动态路由的实现原理,类似于 iOS与Android的实…

背景

随着CSDN 鸿蒙APP 业务功能的增加,以及为了与iOS、Android 端统一页面跳转路由,以及动态下发路由链接,路由重定向等功能。鸿蒙动态路由方案的实现迫在眉睫。

实现方案

鸿蒙版本动态路由的实现原理,类似于 iOS与Android的实现原理,具体理论可以查看 iOS 动态路由实现 这篇博文,这边不在赘述,这边只阐述实现逻辑。

1、路由地址与页面绑定

为了让鸿蒙中的每个页面都有一个固定的URL地址,我们这边借助了三方框架 HMRouter,具体HMRouter的实现方案,可以查看文档

@HMRouter({ pageUrl: 'app://app.com/blog/detail' })
@Component
export struct BlogDetailPage {
}

2、动态路由注册与跳转

我们实现了一个Router类,该类来实现我们动态路由表存储以及跳转的所有逻辑。routers 中存放了所有已经注册的URL。

 class Router {/***  保存了所有已注册的 URL*  结构类似 {"blog": {":blogId": {"_":callback}}}*/private  routers:Map<string,CommonAllType>}

通过下面方法实现注册动态路由表routers

 /** 添加路由到路由表* */private addURL(urlStr:string):Map<string,CommonAllType>{let pathComponents = this.pathComponentsFromURL(urlStr)let subRoutes = this.routersfor (let pathComponent of pathComponents){if (!subRoutes.get(pathComponent)) {subRoutes.set(pathComponent,new Map())}subRoutes = subRoutes.get(pathComponent) as Map<string,CommonAllType>}return subRoutes}

例如注册如下路由:

 Router.registerURLPattern('https://blog.csdn.net/:us' ,(params)=> {})

注册到本地路由表routers中应该是如下所示

{"https": {"blog.csdn.net": {":us": {"_": function ( {...} )}}}
}

在这里插入图片描述
所有注册的路由,都是以这种方式存储在routers中,跳转时就会从路由表中查询匹配到的路由,来跳转。
当有路由跳转时,调用以下方法:

Router.openUrl('https://blog.csdn.net/weixin_36162680/article/details/124127748', {'isLogin':true})

跳转时,匹配到路由有,那么也会生成相应的路由参数,如下:

{"un": "weixin_36162680","id": "124127748"
}

3、动态路由重定向实现及远端路由表格式

路由重定向

对于移动端的路由重定向,实际上就是将一个路由转换为另一个路由,例如:
https://blog.csdn.net/:us
转换为:
app://app.com/blog/detail?us=xxx

远端路由表格式

一条路由规则,分为一个 Key 和对应的 Value,Key 为需要注册的路由(匹配规则),Value 中包含重定向的路由地址,或者需要拦截的参数等。
这里面的Key 必须是与鸿蒙中页面所绑定的路由地址。

{"app://app.csdn.net/blog/detail": {"needLogin": true},"https://blog.csdn.net/:un": {"redirectUrl": "csdnapp://app.csdn.net/blog/detail"}
}

跳转时重定向逻辑

Router.registerURLPattern('https://blog.csdn.net/:us' ,(params)=> {//判断是否需要登录if (!UserTool.isLogin() && params.has(Router.routerNeedLogin)) {let needLogin = params.get(Router.routerNeedLogin) as booleanif (needLogin) {Router.login()return}}//判断是否需要重定向.....})
HMRouter 路由是否注册

在使用的时候,还有情况需要判断页面是否绑定了HMRouter

/** hm_router是否注册* */static isRegisterHMRouter(urlStr: string) : boolean {let mapJsonValue = getContext().resourceManager.getRawFileContentSync('hm_router_map.json')let jsonStr: string = strUtils.uint8ArrayToStr(mapJsonValue)let jsonObj = JSON.parse(jsonStr) as objectlet routMapArray = jsonObj['routerMap'] as Array<object>if (!strUtils.isBlank(urlStr)) {try {let tempURL = Url.URL.parseURL(urlStr)let tempUrlStr = tempURL.protocol + '//' + tempURL.host + tempURL.pathnamelet found = falsefor (let value of routMapArray){let name = value['name'] as stringif (name === tempUrlStr) {found = truebreak}}return found}catch (err){}}return false}

至此,基本路由跳转方案均已经实现,另外可以通过判断路由是否注册,来提示用户。

http://www.mmbaike.com/news/44301.html

相关文章:

  • 江苏营销型网站推广外链平台
  • 太原免费网站建设百度竞价广告推广
  • 电子商务网站建设 价格自助建站申请
  • 潍坊专业做网站的公司网络广告推广方法
  • 网站托管今天晚上19点新闻联播直播回放
  • 能源网站模板百度网站入口
  • 药企做网站相似图片在线查找
  • 海南省建设培训与注册中心网站各大网站提交入口网址
  • 西宁手机网站建设营销必备十大软件
  • 建设网站比较好公司吗百度搜索结果优化
  • 网站开发 法律声明网站批量查询工具
  • 平邑网站建设合肥seo排名扣费
  • 虚拟主机建立网站许昌网站seo
  • 做视频资源网站有哪些内容营销软文推广平台
  • 北京手机版建站系统开发万能bt搜索引擎
  • 免费网站域名宁波seo关键词优化方法
  • 企业型网站价目表seo网站优化软件
  • 环保主题静态网站软文发布平台有哪些
  • 建材类网站模板联盟营销平台
  • 个人网站开发与实现开题报告产品推广策划
  • 临沂门户网站制作利尔化学股票最新消息
  • 做网站赚金币爱站小工具圣经
  • 如何做b2b网站信息百度推广注册
  • 湖南省内出行最新政策东莞seo广告宣传
  • 有空间域名服务器怎么做网站优化大师怎么删除学生
  • 信阳电子商务网站建设seo优化培训公司
  • 合肥外贸网站建设公司排名南宁百度关键词优化
  • wordpress怎么更换系统文件夹网络网站推广选择乐云seo
  • 3 建设营销型网站流程湖南专业关键词优化服务水平
  • 手机wap网站模板免费下载销售的三个核心点