缩小后不会实例化角度控制器

时间:2014-12-18 16:38:49

标签: javascript angularjs minify

我的原始源代码如下:

(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方法。

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

1 个答案:

答案 0 :(得分:0)

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

JavaScript的缩小不是问题。遗憾。

这些问题帮助了我: