【发布时间】:2014-11-28 08:23:53
【问题描述】:
在我的 .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');
}]);
我想做的是找到一种方法将代码(目前已复制到每个控制器中)移动到更智能、更整洁的东西中。例如,在路由实例化期间路由可以调用的东西。当然,每个控制器都应该有一个不同的键,但实际上那个键可能正是控制器名称。我真的不知道如何改善这一点。有什么建议吗?
【问题讨论】:
-
我经常觉得控制器应该具有“之前”功能,您可以说“在运行任何控制器之前运行此代码”。在“旧”时代,我使用 sammyjs 进行客户端路由,它支持“之前”功能,该功能在每个路由的处理程序之前运行。