6
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.contro‌​ller=b("thisController",{$scope:a}).constructor,a.templateUrl="/www/thisPage"):
(a‌​.controller=b("thatController",{$scope:a}).constructor,a.templateUrl="/www/thatPa‌​ge")
}])

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

编辑:所以发生了什么,是它正在传递 {$scope: a} 这很好,但是在那个引用的控制器上,当它被缩小时,那个 $scope 已经变成 a 或 b 或 e 取决于......所以如果我写代码“预先缩小”,这意味着我从字面上找到了另一个控制器中代表 $scope 的字母,我可以让它工作,但这太hacky了!再一次,有什么想法吗?

使用 Grunt 缩小 Angular 1.0.5 ...也许在以后的版本中修复?

第二次编辑:一个不错的答案是将两个控制器明确地放入同一个文件中......这很丑......但它有效!所以在一个控制器中,我声明了 2 个子控制器,这是蹩脚的。如果您知道另一种方法,请与班级分享!

4

1 回答 1

3

我正在与@mclenithan 一起解决这个问题,我们想出的是:

$scope.controller = ['$scope', 'service1', 'service2', 
    $controller('thisController', { $scope: $scope }).constructor];

主要问题是控制器thisController,并且thatController有更多的参数要注入而不仅仅是$scope(在这个例子中它期望service1service2)。

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

使用数组表示法而不仅仅是控制器函数解决了这个问题。有关更多信息,请参阅本教程中有关缩小的说明。

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

于 2013-08-09T17:22:15.837 回答