Angular UI-Router重定向路由

时间:2014-08-28 16:34:38

标签: angularjs angular-ui-router

Angular UI-Router文档使用以下示例进行重定向:

$urlRouterProvider.when(state.url, ['$match', '$stateParams', function ($match, $stateParams) {
    if ($state.$current.navigable != state || !equalForKeys($match, $stateParams)) {
        $state.transitionTo(state, $match, false);
    }
}]);

https://github.com/angular-ui/ui-router/wiki/URL-Routing#when-for-redirection

我的问题是state.url。您可以使用$state服务获取州的网址,例如$state.get('home')

但这是一项服务,在配置阶段无法使用,那么我如何获取状态网址以将其作为$urlRouterProvider.when的第一个参数?

2 个答案:

答案 0 :(得分:0)

$routeProvider是一个垫片,它在$route / $routeProvider之上实现了当前的AngularJS $stateProvider API,使人们可以更轻松地将应用程序逐步转换为$ stateProvider - 它只是通过编写名称和其他一些小东西来简单地将路径定义捏造成状态定义。

$urlRouterProvider只需负责观看$location,以及当它逐个更改运行规则列表直到匹配时。究竟如何"匹配"已定义,当规则匹配时发生的情况取决于该规则;在最低级别它只是一个函数,如果它已处理URL,则返回true。但是,对于RegExps规则以及带有占位符(由state.url使用)的路径模式,可以通过$urlMatcherFactory编译成规则,从而构建支持。 $urlRouterProvider也支持重定向。

目前$urlRouterProvider应该比$routeProvider中的相应代码更快,因为它不会在每个位置更改时重新解析网址模式,而是挂起到已编译的UrlMatcher个对象。

答案 1 :(得分:0)

这实际上效果更好,因为您不必创建正则表达式:

var forks = {
  issueConditionFork: function() {
    if ($stateParams.serviceType === 'sell') {
      return 'condition';
    }
  }
};

$rootScope.$on('$stateChangeStart', function(event, state) {
  var fork;
  fork = forks[state.name];
  if (fork) {
    $state.go(fork());
    return event.preventDefault();
  }
});

在你的跑步区。