angularjs - 当成功位置不同且不支持 $location.path ('..' ) 时,如何在 AngularJs 中重用 Controller ?

标签 angularjs angularjs-routing

现在,$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/

相关文章:

angularjs - 使用Angular js和Grails上传文件

AngularJS + 指令 : Multiple Transcluded Elements

javascript - 如何避免在单个对象中切换多个条件?

javascript - .run 为所有 View 触发 - AngularJS

django - 在具有 Angular 前端的简单 Django Rest Framework 应用程序中会发生什么?

javascript - 使用函数通过 $routeProvider 定义 Controller

angularjs - 如何在 AngularJs 中创建用户友好和 SEO 友好的 URL

angularjs - 一些 angularjs 示例在 jsfiddle 和 plunker 中不起作用

javascript - Angular route 的动态页面

html - 在 Angularjs 中持久化一个 iframe