过滤器与拦截器

拦截器是lighting框架的一种路由过滤机制,和内置事件不同的是:拦截器具有阻断能力!

拦截器一般的使用场景主要有以下的几个方面:

  1. 登录会话校验
  2. 路由权限校验
  3. 视图数据注入

先来看一下简单的例子:

import App from "light";
App.filter("start",function (next) {
//启动拦截器
App.log("app started...");
next();
}).filter("route",function (from, to, next) {
//视图拦截器
App.log(`view changed:${from.path}--${to.path}`);
next()
}).filter("navigate", function (view, params, options, next) {
//路由跳转拦截器
App.log(view);//跳转的目标路由
App.log(params);//路由参数
App.log(options);//跳转参数
next()
}).start();

其中filter为拦截器注册的API,接受两个入参:

  1. type,拦截器的类型,现阶段支持三种:
  2. cb,拦截处理函数,接受的入参各不相同:
    • 启动拦截器:处理成功的回调
    • 视图拦截器:上一个视图/目标视图/处理成功的回调
    • 路由跳转拦截器:目标路由/路由参数/跳转参数/处理成功的回调

拦截器的处理机制是:当发生拦截行为的时候会调用用户定义的拦截器处理函数,如果处理函数处理成功并调用了next(),则继续处理下一个拦截器,直到拦截器链路中的处理函数都处理了此阶段;如果没有拦截器处理失败(也就是都执行了next()),则正常发生路由行为,否则中断!

拦截器的注册时机

对拦截器的注册应该在Light.start()之前。