我的原始源代码如下:
(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
方法。
我应该搜索或检查代码?我错过了什么吗?
答案 0 :(得分:0)
我的问题是我还将Jade模板编译成HTML。我对生产环境的构建设置与开发有点不同。 Jade输出<div ui-view="ui-view">
而不是空属性,阻止ui-router
将模板加载到父视图中,导致控制器无法实例化。
JavaScript的缩小不是问题。遗憾。
这些问题帮助了我: