【发布时间】: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 的 module、config 和 controller 方法。
我应该在代码中搜索或检查什么?我错过了什么吗?
【问题讨论】:
-
是否有其他文件定义(或可能重新定义)“my.foo”模块?
-
不,模块没有重新定义,我没有文件可以“获取”模块以进一步定义。
-
嗯...此外,缩小删除了您的 IIFE 周围的括号很奇怪 - 这不应该像这样工作:
function(a){..}(p) -
我所有的文件都包含在 IIFE 中,连接+缩小将它们全部变成一个文件,例如:
!function(a){...}(angular),function(a){...}(angular),function(a){...}(angular);,到目前为止这是有效的(至少对于其他路由和控制器)。
标签: javascript angularjs minify