【问题标题】:Angular controller is not instantiated after minification缩小后未实例化角度控制器
【发布时间】:2014-12-18 16:38:49
【问题描述】:

我的原始源代码如下所示:

(function(angular) {
  'use strict';

  /* @ngInject */
  function config($stateProvider) {
    $stateProvider
      .state('bar.foo', {
        url: '/foo',
        templateUrl: 'foo-view.html',
        controller: 'FooController',
        controllerAs: 'vm'
      });
  }

  /* @ngInject */
  function FooController() {
    window.alert('foo');
  }

  angular
    .module('my.foo', [])
    .config(config)
    .controller('FooController', FooController);

}(angular));

这样可以正常工作。

然后我使用 ngAnnotate 和 UglifyJS 将其缩小,并得到这段代码(格式化以便于阅读):

function (a) {
  'use strict';
  function b(a) {
    a.state('bar.foo', {
      url: '/foo',
      templateUrl: 'foo-view.html',
      controller: 'FooController',
      controllerAs: 'vm'
    })
  }
  function c() {
    window.alert('foo')
  }
  b.$inject = ['$stateProvider'],
  a.module('my.foo', [])
   .config(b)
   .controller('FooController', c)
}(angular),

而且,它不起作用。当我进入bar.foo 状态时,控制器不会被调用。其他控制器和路由器状态工作正常。这个好像静音了,控制器函数里面的代码没有被调用。

控制台不显示任何错误。

我不知道该做什么或看哪里。

整个 JavaScript 更大,是几个小文件的串联。单个缩小的 JS 文件在此之前和之后都有控制器,可以正常工作。

调试压缩文件显示 JavaScript 正在向 AngularJS 发出模块定义调用,因此调用了 Angular 的 moduleconfigcontroller 方法。

我应该在代码中搜索或检查什么?我错过了什么吗?

【问题讨论】:

  • 是否有其他文件定义(或可能重新定义)“my.foo”模块?
  • 不,模块没有重新定义,我没有文件可以“获取”模块以进一步定义。
  • 嗯...此外,缩小删除了您的 IIFE 周围的括号很奇怪 - 这不应该像这样工作:function(a){..}(p)
  • 我所有的文件都包含在 IIFE 中,连接+缩小将它们全部变成一个文件,例如:!function(a){...}(angular),function(a){...}(angular),function(a){...}(angular);,到目前为止这是有效的(至少对于其他路由和控制器)。

标签: javascript angularjs minify


【解决方案1】:

我的问题是我也在将 Jade 模板编译成 HTML。而且我的生产环境构建设置与开发环境略有不同。 Jade 正在输出 <div ui-view="ui-view"> 而不是空属性,阻止 ui-router 将模板加载到父视图中,导致控制器无法实例化。

JavaScript 的缩小不是问题。对不起。

这些问题帮助了我:

【讨论】:

  • 我没有编译任何模板,但我仍然有这个问题。我已经通过了几个关于 SO 的建议无济于事。其中一些选项包括在 uglify 任务中将 mangle 设置为 false。到目前为止我没有选择,因为即使在我的代码的缩小版本中,代码看起来也很好。
猜你喜欢
  • 2013-08-15
  • 2015-04-22
  • 2015-02-27
  • 1970-01-01
  • 1970-01-01
  • 2013-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多