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
的第一个参数?
答案 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();
}
});
在你的跑步区。