使用缩小的JavaScript进行角度注入器错误

时间:2015-10-10 17:44:13

标签: angularjs coffeescript

我一直在努力为这个问题找到解决方案:

我在我的网站上使用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) {

有人可以帮我解决这个问题吗?

2 个答案:

答案 0 :(得分:4)

使用数组表示法进行缩小安全依赖注入:

myApp.controller("videoController", ['$scope', '$http', '$compile', function($scope, $http, $compile) {

另一种选择是使用构建任务为您自动注释注射:

// @ngInject
myApp.controller("videoController", function($scope, $http, $compile) {

您需要grunt或gulp插件,例如ngAnnotate

https://docs.angularjs.org/guide/di

答案 1 :(得分:1)

当您缩小上述代码时,您将获得类似

的内容
a.controller("videoController", function(x, y, z) {...

请注意,$scope, $http, $compile已替换为x, y, z

因此,当角度开始执行时,控制器无法找到注射器,因为$scope, $http, $compilex, 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

$inject Property Annotation

$scope

另外检查ng-annotate