Javascript 角度构建在服务器上不工作
我正在尝试在服务器上运行AngularJS前端。我正在使用Yeoman构建应用程序。我上传了一个非常基本的hello world应用程序,并在加载JavaScript的情况下获得了纯HTML文本。Chrome中的控制台显示:Javascript 角度构建在服务器上不工作,javascript,angularjs,yeoman,Javascript,Angularjs,Yeoman,我正在尝试在服务器上运行AngularJS前端。我正在使用Yeoman构建应用程序。我上传了一个非常基本的hello world应用程序,并在加载JavaScript的情况下获得了纯HTML文本。Chrome中的控制台显示: Error: Unknown provider: aProvider <- a at Error (<anonymous>) at http://../scripts/vendor/d10639ae.angular.js:2627:15
Error: Unknown provider: aProvider <- a
at Error (<anonymous>)
at http://../scripts/vendor/d10639ae.angular.js:2627:15
at Object.getService [as get] (http://../scripts/vendor/d10639ae.angular.js:2755:39)
at http://../scripts/vendor/d10639ae.angular.js:2632:45
at getService (http://../scripts/vendor/d10639ae.angular.js:2755:39)
at invoke (http://../scripts/vendor/d10639ae.angular.js:2773:13)
at Object.instantiate (http://../scripts/vendor/d10639ae.angular.js:2805:23)
at http://../scripts/vendor/d10639ae.angular.js:4620:24
at update (http://../scripts/vendor/d10639ae.angular.js:13692:26)
at http://../scripts/vendor/d10639ae.angular.js:8002:24 d10639ae.angular.js:5526
我很确定您已经在生产服务器上使用了代码缩小器,对吗 无论如何,使用minifier可能会搞乱依赖注入,如果它没有正确完成。为什么会发生这种情况?看看: 依赖注入与代码精简
函数MyController($scope,$log){…}
在上面的代码片段中,您正在使用隐式DI。Angular查看变量$scope
,并尝试将其与任何托管依赖项匹配。在本例中,它将与$scope
对象相匹配
但是,在代码缩小后,这将不起作用,因为结果将以某种方式如下所示:
函数a(b,c){…}
由于变量名和函数名已缩小,Angular无法确切知道“a”是什么
解决方案
使用显式依赖项注入配置
var MyController = function($scope, $log) { ... }
MyController.$inject = ['$scope', '$log'];
在这个代码段中,您定义了哪些依赖项应该通过将它们的名称数组附加到名为$inject
的控制器(或服务)的特殊属性来解析。现在Angular将知道它应该解析$scope
,并将其作为第一个参数传递给MyController
。然后它将解析$log
,并将其作为第二个参数传递。
这一切都是可能的,因为迷你们不会修改字符串变量的内容。正如@ŁukaszBachman所建议的,您可以使用$inject注释,或者如果您想:
如果我像这样初始化控制器->
yoAngApp.controller('MainCtrl',function($window,$scope){
?我像你说的那样编辑了代码,似乎不起作用-同样的问题(我在问题中添加了代码)…您需要在每个要最小化的脚本中使用适当的注释。下面是一个例子,证明内联注释在最小化的脚本中有效。此外,请确保在相同的周期内最小化角度源,以便最小化标识符(例如,angular.module
变为a.m
)在你的应用程序中都是一样的。太好了,我很高兴你们已经找到了答案!:)
var MyController = function($scope, $log) { ... }
MyController.$inject = ['$scope', '$log'];
app.controller('UsersController',
[
'$scope', 'UserService', '$location', '$routeParams',
function($scope, User, $location, $routeParams) {
$scope.user = User.get({id: $routeParams.id});
...
}
]
);