在angularJs中存储解析方法的最佳位置

时间:2014-11-04 09:40:40

标签: javascript angularjs angularjs-routing angularjs-controller

我目前正在为我的管理面板路线设置解决方案,并且我想知道存储它们的最佳方式是理想情况下我不希望我的路由器充满这样的方法:

when('/admin', {
    templateUrl: 'app/private/admin/view.html',
    controller: 'admin',
    resolve: ['$q', '$location', 'api', function($q, $location, api){

        var deferred = $q.defer(),
            session = api.session();

        if(session){
            deferred.resolve(session); 
        } else {
            api.authorise().success(function(response){
                deferred.resolve(response); 
            }).error(function(error){
                $location.path('/login');
                deferred.reject(error);
            });
        }

        return deferred.promise;

    }]
})

我认为理想的结构是将结果存储在我用于该路径的控制器中,如下所示:

when('/admin', {
    templateUrl: 'app/private/admin/view.html',
    controller: 'admin',
    resolve: adminCtrl.resolve
})

但是管理控制器无法从配置中访问,因此这使我不得不使用在扩展应用程序时仍然会变得混乱的提供程序。

你们如何处理你的决议/是否可以将它存储在我的控制器中?

1 个答案:

答案 0 :(得分:3)

我通常会将服务用于我想要解决的事情:

when('/admin', {
templateUrl: 'app/private/admin/view.html',
controller: 'admin',
resolve: { adminData: function(myService) { return myService.list(); } }
});

更高级的角度路由器(如UI路由器)允许状态从父状态继承。如果要在多个状态下获得解析,可以使用继承,并在父状态中定义解析。 (https://github.com/angular-ui/ui-router/wiki/Nested-States-%26-Nested-Views)。