如何在$ routeProvider实例化的每个控制器上执行相同的init代码?

时间:2014-10-03 09:05:45

标签: angularjs angular-routing

在我的.config中,我有一个实例化一对controller-router的路由器:

angular.module('reporting', ['ng', 'ngRoute', 'ngResource', 'reporting.directives', 'reporting.controllers', 'reporting.config', 'ngGrid', 'ui.bootstrap'])
    .config(["$routeProvider", "$provide", function ($routeProvider, $provide) {
        $routeProvider
            .when('/dealersReq', {
                templateUrl: 'reporting/partials/dealersReqs.html',
                controller: 'DealersCtrl'
            })
            .when('/lmtReq', {
                templateUrl: 'reporting/partials/lmt.html',
                controller: 'lmtCtrl'
            })
            .when('/leadsCreated', {
                templateUrl: 'reporting/partials/leadsCreated.html',
                controller: 'LeadsCreatedCtrl'
            })
...

但每个控制器共享相同的initialization code(想象它像构造函数)在rootScope中设置一些变量,如标题和<view>之外的某些控制器的其他有用信息:

.controller('DealersCtrl', ['$scope','$rootScope', 'CONFIG',
    function($scope, $rootScope, CONFIG) {

        //////////// duplicated code

        var key = 'qtsldsCrtSncheQ';

        $rootScope.openReport.key = key;
        $rootScope.openReport.title = CONFIG.reports['' + key].title;

        //////////// duplicated code

        console.log('Initialized! Now I do what a controller should really do');
    }]);

我想要做的是找到一种方法将该代码(目前复制到每个控制器中)移动到更聪明,更整洁的东西。例如,在路由实例化期间路由可以调用的东西。当然每个控制器应该有一个不同的密钥,但实际上这个密钥可能就是控制器名称。我真的不知道如何改善这一点。有什么建议吗?

2 个答案:

答案 0 :(得分:0)

为什么不在$rootScope上创建一个方法,然后从每个控制器调用它,即:$rootScope.init()

答案 1 :(得分:0)

您可以将服务用于共享代码,但应避免使用$ rootScope https://stackoverflow.com/a/16739309/3068081