我在项目中有AngularJS和Bootstrap的Angular指令,这两个指令都是通过Nuget添加的。
当编译debug =“true”时,一切正常,但是一旦我将编译调试更改为 false ,Angular就会停止工作,并且我在Chrome的控制台中收到以下错误:
Error: [$injector:unpr] http://errors.angularjs.org/1.2.15/$injector/unpr?p0=nProvider%20%3C-%20n
at Error (native)
at http://localhost:10366/bundles/angular?v=Bi8OwYOhmsGdeIKC46ZQQdIHX1faTIVR48lG9QG3GBw1:1:448
at http://localhost:10366/bundles/angular?v=Bi8OwYOhmsGdeIKC46ZQQdIHX1faTIVR48lG9QG3GBw1:1:14726
at Object.i [as get] (http://localhost:10366/bundles/angular?v=Bi8OwYOhmsGdeIKC46ZQQdIHX1faTIVR48lG9QG3GBw1:1:13802)
at http://localhost:10366/bundles/angular?v=Bi8OwYOhmsGdeIKC46ZQQdIHX1faTIVR48lG9QG3GBw1:1:14801
at i (http://localhost:10366/bundles/angular?v=Bi8OwYOhmsGdeIKC46ZQQdIHX1faTIVR48lG9QG3GBw1:1:13802)
at r (http://localhost:10366/bundles/angular?v=Bi8OwYOhmsGdeIKC46ZQQdIHX1faTIVR48lG9QG3GBw1:1:14014)
at Object.instantiate (http://localhost:10366/bundles/angular?v=Bi8OwYOhmsGdeIKC46ZQQdIHX1faTIVR48lG9QG3GBw1:1:14185)
at http://localhost:10366/bundles/angular?v=Bi8OwYOhmsGdeIKC46ZQQdIHX1faTIVR48lG9QG3GBw1:1:30669
at http://localhost:10366/bundles/angular?v=Bi8OwYOhmsGdeIKC46ZQQdIHX1faTIVR48lG9QG3GBw1:1:23558 angular?v=Bi8OwYOhmsGdeIKC46ZQQdIHX1faTIVR48lG9QG3GBw1:1
(anonymous function) angular?v=Bi8OwYOhmsGdeIKC46ZQQdIHX1faTIVR48lG9QG3GBw1:1
我所有其他Javascript / CSS都按预期工作。什么可能导致Angular一旦缩小就停止工作?这是一个已知的问题吗?
由于
答案 0 :(得分:10)
compilation debug
值设置为"false"
时,ASP.NET MVC minifies javascript文件。 angular tutorial包含有关缩小的说明:
由于Angular将控制器的依赖关系从参数名称推断到控制器的构造函数,如果你要缩小[你的]控制器的JavaScript代码,它的所有函数参数也会缩小,并且依赖注入器会无法正确识别服务。
克服此问题的最常用技术是内联括号表示法,例如:
phonecatApp.controller('PhoneListCtrl', ['$scope', '$http', function($scope, $http) {...}]);
此SO问题解释了缩小安全语法的重要性:Angularjs minify best practice