BUZ-路由

Router -- 路由管理

Router是驱动页面渲染的核心组件,控制整个页面的流转和相关配置项的加载。

在项目开发中不会对Router进行频繁操作,一般开发人员只会关心Controller,此篇文章将对Router底层的配置 和高级用法进行介绍,有兴趣的童鞋可以深入了解下。

Router在Application(应用池)初始化时进行初始化,并挂载到App中,可以通过App进行相应的操作。

Router是通过HashChange进行视图渲染的,请保证浏览器HashChange是否支持。

驱动流程

可参考:教程/加载流程

在接下来的章节中你首先要对两个变量进行初步了解

1

2

3

4

5

6

7

8

9

10

11

12

13

14

//当前路由地址

App.router.fragmentUrl;

 

/**

当前路由地址碎片

{

     

    //碎片信息,例如{area:"home",controller:"index",action:""}

    params: {},

    //当前匹配的路由表信息

    routerMap: undefined

}

*/

App.router.fragment;

事件列表

监听事件

调用方式

1

App.router.trigger("eventName",params);

事件名称作用参数备注
reload重新渲染当前地址  

广播事件

调用方式

1

App.router.on("eventName",function(e,param){});

事件名称作用参数备注
before路由变化时触发的第一个参数{ newFragment: fragment, newFragmentUrl: hash, oldFragment: fragment, oldFragmentUrl: fragmentUrl }在广播触发事件时,若返回false则中断路由流程,触发break事件。
continue继续执行路由awit之后的逻辑 此事件模块配置文件中设置awit=true时,会终止接下来的加载流程,直到 触发continue才会执行,一般适用于等待全局请求结束后再去渲染,例如请求菜单接口。
after路由整体流程执行完毕后触发fragment 
break当路由加载时被中断时触发 

1.在before事件中主动中断(return false)

2.文件加载失败时

before:initArea初始化模块配置文件之前触发  
after:initArea初始化模块配置文件之后触发  

公开方法

addRouterMap-添加路由映射处理方法

1

2

3

4

5

6

7

8

App.router.addRouterMap({

    /**路由规则*/

    role: "",

    /**执行规则*/

    exec: undefined,

    /**地址*/

    path: {}

});

role-路由匹配规则

Router在初始化时会默认向路由映射表中注入默认匹配表。

1

2

3

4

5

6

7

8

9

//例子1

App.router.addRouterMap({

    role: "{area}/{controller}/{action}"

});

 

//例子2

App.router.addRouterMap({

    role: "{area}/{controller}/{action}/{id}"

});

通过上面的例子2,我们就可以在控制器中拿到id参数,并做相应的处理。

当地址发生改变时优先按照路由表录入顺序依次进行匹配,直到找到全部匹配成功的路由表,并返回当前路由表信息作为接下来页面渲染驱动逻辑。 在配置整个项目的路由映射逻辑时,务必注意路由映射顺序。建议:特殊规则>通用规则

exec自定义路由参数解析方法

通过此方法可以为指定的路由表进行参数转换,例如下面的例子。

1

2

3

4

5

6

App.router.addRouterMap({

    role: "Home/{controller}/{action}",

    exec:function(roleParam){

        roleParam.params.area="DemoHome";

    }

});

通过上面这个例子可以看出,当我们访问Home/xxx/xxx地址时,其实是访问的DemoHome区域下面的文件。

path地址转换方法

目前提供arearouterlayout文件的自定义方法

1

2

3

4

5

6

7

8

9

10

11

12

13

App.router.addRouterMap({

    role: "Home/{controller}/{action}",

    exec:function(roleParam){

        roleParam.params.area="DemoHome";

    },

    path:{

        area:"DemoHome/config",

        router:function(fragment){

            return "DemoHome/Demo/router"

        },

        layout:"commonWeb/layout/demoLayout"

    }

});

area默认值:areas/${fragment.params.area || ""}/config

router默认值:areas/${this.fragment.params.area}/${this.fragment.params.controller}/router

layout默认值:commonWeb/layouts/${areaConfig.layout || ""}

removeRouterMap 移除路由映射处理方法

1

App.router.removeRouterMap("Home/{controller}/{action}");

 

https://github.com/ZhangChuanHui/BUZ

这个问题通常出现在使用 Maven 或 Gradle 进行项目构建时,其中某些模块之间存在循环依赖,同时又在注解处理器中使用了这些模块,导致注解处理器无法正确处理这些模块。 解决这个问题的方法是将循环依赖的模块排除在注解处理器之外,具体的做法如下: 1. 对于 Maven 项目,在 pom.xml 文件中为注解处理器配置 exclusions,如下所示: ```xml <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <annotationProcessors> <annotationProcessor>your.annotation.processor.ClassName</annotationProcessor> </annotationProcessors> <excludes> <exclude>iot-api-data-manage</exclude> <exclude>iot-data-buz</exclude> <exclude>iot-data-domain</exclude> </excludes> </configuration> </plugin> </plugins> </build> ``` 2. 对于 Gradle 项目,在 build.gradle 文件中为注解处理器配置 options,如下所示: ```groovy compileJava { options.annotationProcessorPath = configurations.annotationProcessor options.compilerArgs += ['-proc:only'] options.compilerArgs += ['-Ajavax.annotation.processing.SupportedAnnotationTypes=your.annotation.processor.ClassName'] options.compilerArgs += ['-Aproc:exclude=iot-api-data-manage,iot-data-buz,iot-data-domain'] } ``` 在配置文件中,注解处理器的名称和循环依赖的模块名称需要根据实际情况进行修改。排除循环依赖的模块后,重新编译项目即可。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值