angular.module('mainApp').
controller('dynamicRouteController', ['$scope', '$controller', '$routeParams', function($scope, $controller, $routeParams) {
if(/^\d+$/.test($routeParams.pageOrName)) {
$scope.controller = $controller('thisController', { $scope: $scope }).constructor;
$scope.templateUrl = '/www/thisPage';
} else {
$scope.controller = $controller('thatController', { $scope: $scope }).constructor;
$scope.templateUrl = '/www/thatPage';
}
}]);
这缩小为:
"use strict";
angular.module("mainApp").
controller("dynamicRouteController",["$scope","$controller","$routeParams",function(a,b,c){
/^\d+$/.test(c.pageOrName)?
(a.controller=b("thisController",{$scope:a}).constructor,a.templateUrl="/www/thisPage"):
(a.controller=b("thatController",{$scope:a}).constructor,a.templateUrl="/www/thatPage")
}])
这有问题缩小,我认为这是因为{$ scope:$ scope}被改变了......第一次遇到这个/使用过这个方法。任何人都知道更好的方法来写这个,以便它正确缩小?
编辑:所以发生了什么,是它传递{$ scope:a}这很好,但是在那个引用的控制器上,当它缩小时,$ scope已经变成a或b或e依赖...所以如果我写代码“pre-minified”,意思是我确实在另一个控制器中找到了代表$ scope的字母,我可以让它工作,但那太烂了!再一次,任何想法?使用Grunt进行缩小 Angular 1.0.5 ...可能在以后的版本中修复了吗?
第二次编辑:一个不错的答案是将两个控制器同时放入同一个文件中......这很难看......但它确实有效!所以在一个控制器中,我宣布2个子控制器,这是蹩脚的。如果您了解其他方式,请与全班同学分享!
答案 0 :(得分:3)
我正在与@mclenithan讨论这个问题,我们想出的是:
$scope.controller = ['$scope', 'service1', 'service2',
$controller('thisController', { $scope: $scope }).constructor];
主要问题是控制器thisController
和thatController
要注入的参数多于$scope
(在此示例中,它需要service1
和service2
) 。
$controller(...).constructor
返回缩小的控制器函数,参数重命名为a,b,c,d等。当Angular试图实例化控制器时,它试图找到要注入的正确服务时遇到问题。
使用array notation而不仅仅是控制器功能修复了问题。有关详细信息,请参阅教程中的a note on minification。
另请参阅this question了解我们开始尝试做的事情。