首页 > 语言 > JavaScript > 正文

详解AngularJs ui-router 路由的简单介绍

2024-05-06 15:17:57
字体:
来源:转载
供稿:网友

之前有写过一篇关于Angular自带的路由:ngRoute。今天来说说Angular的第三方路由:ui-router。那么有人就会问:为什么Angular有了自带的路由,我们还需要用ui-router呢?这里简单明了的说明下ngRoute和ui-router的区别吧,其实也没很大的区别,主要的就是ngRoute针对于单视图,而ui-router可用于多视图(这里说的视图是指在页面内我们可控制的,可变化的区域)。

比如我们点击了一个link,我们需要在视图中跳转到指定的一个页面,那么ngRoute已经满足了我们的需求,而当我们点击的时候,需要在分别在不同的地方跳转两个不同的页面的时候,ngRoute就不够用了,我们就需要用到ui-router。
这里我们还是先来学习下ui-router(一些简单的服务和用法)

ui-router

$urlRouterProvider

$urlRouterProvider负责监听$location.当$location变化的时候,$urlRouterProvider开始在一个规则的列表中一个个的查找,直到找到匹配的值。$urlRouterProvider用于在后端指定url的状态配置。所有的url被编译成UrlMatcher对象。

依赖: $urlMatcherFactoryProvider   $locationProvider

方法:

deferIntercept(defer);

禁用(或启用)延迟location变化的拦截。如果你想定制与URL同步的行为(例如,你需要保持当前的URL去并且推迟一个变化),那么在配置的时候使用这个方法。

参数:

defer:boolean,确定是禁止还是启用该拦截。

代码:

 angular.module('Demo',['ui.router']) .config(["$urlRouterProvider",function(){   $urlRouterProvider.deferIntercept(defer); // defer = true/false  }])

这是源码部分:

 this.deferIntercept = function (defer) {  if (defer === undefined) defer = true;  interceptDeferred = defer; // 默认是true };

otherwise(rule);

定义一个当请求的路径是无效路径时跳转的路径。

rule:你想重定向的url路径或一个返回的网址路径的规则函数。函数传入两个参数:$injector和$location服务,而且必须返回一个string的url。

代码:

 angular.module('Demo',['ui.router']) .config(["$urlRouterProvider",function(){   $urlRouterProvider.otherwise(rule); // rule = 重定向的url规则 }])

rule(rule);

定义使用$urlRouterProvider 来匹配指定的URL的规则。

参数:

rule:将$injector和$location作为arguments传入的处理函数。用来返回一个string类型的url路径。

代码:

 angular.module('Demo',['ui.router']) .config(["$urlRouterProvider",function($urlRouterProvider){   $urlRouterProvider.rule(function ($injector, $location) {    var path = $location.path(),    normalized = path.toLowerCase();    if (path !== normalized) {      return normalized;    }  }); }])            
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

图片精选