我一直在努力为这个问题找到解决方案:
我在我的网站上使用Angular.js。
我使用CoffeeScript在Visual Studios 2012中编写我的JavaScript。当我保存我的CoffeeScript时 - 保存了JavaScript文件的缩小和非缩小版本。
在我的网页上使用任何缩小版本的JavaScript文件时,我不断收到此错误:
错误:$ injector:unpr 未知的提供商 未知提供者:nProvider< - n $ injector导致无法解析所需的依赖项,从而导致此错误。要解决此问题,请确保已正确定义和拼写依赖项。例如:
如果我不使用缩小版本,一切正常。
以下是我如何使用angular在每个JavaScript文件中声明我的应用程序
(function() {
var myApp;
myApp = angular.module("myApp", ['uploaddirective']);
myApp.controller("videoController", function($scope, $http, $compile) {
有人可以帮我解决这个问题吗?
答案 0 :(得分:4)
使用数组表示法进行缩小安全依赖注入:
myApp.controller("videoController", ['$scope', '$http', '$compile', function($scope, $http, $compile) {
另一种选择是使用构建任务为您自动注释注射:
// @ngInject
myApp.controller("videoController", function($scope, $http, $compile) {
您需要grunt或gulp插件,例如ngAnnotate。
答案 1 :(得分:1)
当您缩小上述代码时,您将获得类似
的内容a.controller("videoController", function(x, y, z) {...
请注意,$scope, $http, $compile
已替换为x, y, z
。
因此,当角度开始执行时,控制器无法找到注射器,因为$scope, $http, $compile
被x, y, z
替换,并且没有可注射的提供者x
,{{1 }}或y
,因此angular会触发错误z
。
解决方案1
您可以关注Inline Array Annotation
,
Unknown Provider
在缩小之后你会得到像
这样的东西myApp.controller("videoController", ['$scope', '$http', '$compile', function($scope, $http, $compile) {...
缩小过程对字符串没有影响,这里angular将使用一个包含与提供者匹配的字符串的数组。此处,angular将a.controller("videoController", ['$scope', '$http', '$compile', function(x, y, z) {...
与x
匹配,依此类推。
解决方案2
$scope
另外检查ng-annotate