我有一个ui-router路由front
我的意图是当应用转到front
时,前端会使用一些业务逻辑重定向到另一条路线:front.register
,front.login
,front.loginFirstTime
等。
这是我第一次访问路线时(前面 - > front.register),但不是第二次。
front
- (自动)> front.register
- (点击) - > front.info
- (点击) - > front
- ! - > front.register
因此每次go()都不会重新加载控制器。好的,但我该怎么做?
路由如何将业务逻辑包装转发到其他路由?
angular.module('wmw').controller('Front', ['$scope', 'Global', 'User', '$state',
function($scope, Global, User, $state) {
$scope.Global = Global;
$scope.User = User;
console.log('only run on first visit');
User.loadData()
.then(function(routerState) {
$state.go('front.'+routerState);
});
}]
);
User.loadData()返回一个promise。 .then()在加载数据时运行。 routerState
是下一个值得参观的地方。不幸的是,这段代码只运行一次。
答案 0 :(得分:1)
在front
状态的控制器中,您可以观看当前状态,因为您正在监视front
的子状态,您可以使用前置状态控制器中的简单监视来执行此操作:
angular.module('wmw').controller('Front', ['$scope', 'Global', 'User', '$state',
function($scope, Global, User, $state) {
$scope.Global = Global;
$scope.User = User;
// Save the router state. Watch the current route
$scope.state = $state;
$scope.$watch('state.current.name', function (v) {
// This runs on every view change
if ($state.current.name === 'front') {
User.loadData()
.then(function(routerState) {
$state.go('front.'+routerState);
});
}
});
}]
);
您可能希望有一个简单的if来检查目标状态是否不是阻止重定向循环的当前状态。