现在,$location 服务正在妨碍我们。假设您想要对多条路线使用相同的 Controller ,但期望在成功“保存”后,目标路线将有所不同。
.when('/sponsors/:sponsorId/games/add', {templateUrl: 'partials/games/create',controller: 'GameCreateCtrl', access: 'sponsor'})
// an admin can see all the games at
.when('/admin/games/add', {templateUrl: 'partials/games/create',controller: 'GameCreateCtrl', access: 'admin'})
任一操作成功都会显示游戏。该路线只是父路径。 例如/admin/games 或/sponsors/:sponsorId/games。
$location 服务似乎不支持相对路径 $location.path('..')。应该是? 在这种情况下重用 GameCreateCtrl 的最佳方法是什么?
$scope.save = function () {
GameService.save($scope.game).$promise.then(function(res){
console.log(res);
growl.addSuccessMessage("Successfully saved game: " + $scope.game.name);
console.log("saving game by id:" + $scope.game._id);
var path = $location.path();
$location.path(path.replace('/add', '')); // this seems like a hack
});
}
最佳答案
您可以使用resolve
来做到这一点:
.when('/sponsors/:sponsorId/games/add', {
templateUrl: 'partials/games/create',
controller: 'GameCreateCtrl',
resolve: {
returnUrl: function($routeParams){
return '/sponsors/' + $routeParams.sponsorId + '/games';
}
}
})
.when('/admin/games/add', {
templateUrl: 'partials/games/create',
controller: 'GameCreateCtrl',
resolve: {
returnUrl: function(){
return '/admin/games';
}
}
})
在 Controller 中:
app.controller('myCtrl', function($scope, returnUrl){
$scope.save = function () {
GameService.save($scope.game).$promise.then(function(res){
// ...
$location.path(returnUrl); // this seems like a hack
});
};
});
您根据路由将不同的 returnUrl
参数传递给 Controller 。
关于angularjs - 当成功位置不同且不支持 $location.path ('..' ) 时,如何在 AngularJs 中重用 Controller ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23016735/