如何在AngularJS中使用$ controller时消除缩小错误

mcl*_*han 6 javascript angularjs

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';
    }
  }]);
Run Code Online (Sandbox Code Playgroud)

这缩小为:

"use strict";
angular.module("mainApp").
controller("dynamicRouteController",["$scope",??"$controller","$routeParams",function(a,b,c){
/^\d+$/.test(c.pageOrName)?
(a.contro??ller=b("thisController",{$scope:a}).constructor,a.templateUrl="/www/thisPage"):
(a??.controller=b("thatController",{$scope:a}).constructor,a.templateUrl="/www/thatPa??ge")
}])
Run Code Online (Sandbox Code Playgroud)

这有问题缩小,我认为这是因为{$ scope:$ scope}被改变了......第一次遇到这个/使用过这个方法.任何人都知道更好的方法来写这个,以便正确缩小?

编辑:所以发生了什么,是它传递了{$ scope:a}这很好,但是在那个引用的控制器上,当它被缩小时,$ scope已成为a或b或e依赖...所以如果我写代码"pre-minified",意思是我确实在另一个控制器中找到了代表$ scope的字母,我可以让它工作,但那太酷了!再一次,任何想法?

使用Grunt进行缩小Angular 1.0.5 ...可能在以后的版本中修复了?

第二次编辑:一个不错的答案是将两个控制器都放在同一个文件中,明确地......这很丑......但是它有效!所以在一个控制器中,我宣布2个子控制器,这是蹩脚的.如果您了解其他方式,请与全班同学分享!

Glo*_*opy 3

我正在与@mclenithan 一起研究这个问题,我们得出的结论是:

$scope.controller = ['$scope', 'service1', 'service2', 
    $controller('thisController', { $scope: $scope }).constructor];
Run Code Online (Sandbox Code Playgroud)

主要问题是控制器thisController,并且thatController需要注入的参数不仅仅是$scope(在本例中需要service1service2)。

返回$controller(...).constructor缩小的控制器函数,参数重命名为 a、b、c、d 等。当 Angular 尝试实例化控制器时,它在尝试找到要注入的正确服务时遇到问题。

使用数组符号而不仅仅是控制器函数解决了这个问题。有关详细信息,请参阅教程中有关缩小的注释。

另请参阅此问题以了解我们一开始就尝试做的事情的背景。