未知的提供者:捆绑后的$ resourceProvider

时间:2016-02-10 15:39:04

标签: javascript angularjs asp.net-mvc bundle

我有一个带有angularjs的MVC 4.5项目。我已经对控制器和工厂进行了捆绑和缩小。我已经阅读了关于使角度控制器和工厂缩小安全的文章,但是我得到了这个错误,我找不到问题:

  

未知提供商:$ resourceProvider

模块:

var app = angular.module("seducApp", []);
app.$inject = ['ngRoute', 'ngResource', 'ngSanitize', 'ngAnimate', 'ui.tinymce', 'mgcrea.ngStrap.tooltip',
'mgcrea.ngStrap.datepicker', 'mgcrea.ngStrap.alert', 'ui.select', 'uuid4', 'rt.popup', 'angular-md5', 'mgcrea.ngStrap.button',
'ui.bootstrap.tabs', 'mgcrea.ngStrap.timepicker', 'naif.base64', 'base64', 'angular-smilies', 'angular-google-adsense',
'angularFileUpload', 'angular.directives-round-progress', 'numericbinding', 'ngImgCrop', 'ui.tree', 'timer',
'$httpProviderConfig', '$compileProviderConfig', '$locationProviderConfig', 'uiSelectConfig', 'datetimeFilter',
'cutFilter', 'groupFilter', 'partitionFilter', 'aDisabledDirective'];

工厂:

app.factory('siteRepository', function ($resource, $http) {
   return {
        checkSiteStatus: function () {
            return $resource('/Home/GetSiteStatus').query();
        },
        getSiteStatus: function () { 
            return $http.get('/Home/GetSiteStatus') 
        },        
        getSiteChangeLog: function () {
            return $http.get('/Home/GetSiteChangeLog')
        }
    }
});

在web.config中将Debug设置为true,然后我不应该获得工厂的缩小版本。

我尝试了很多东西,但没有解决方案:(

2 个答案:

答案 0 :(得分:2)

删除app.$inject声明。而是传递依赖关系数组。请注意以下简化的演示,该演示稍微展示了一下......

var mod = angular.module('mod', []);

mod.factory('modFactory', function() {

    return {
        'woo': function woo() {
            console.log('woah!');
        }
    }
});

// -----------------------------------------------------

var app = angular.module('app', ['mod']);

app.controller('ctrl', function(modFactory) {
    modFactory.woo();
});

上述情况有效,而以下情况将失败......

var app = angular.module('app', []);

app.$inject = ['mod'];
  

未知提供者:modFactoryProvider

JSFiddle Link - 演示

快速解决您的问题包括将app定义更改为以下内容......

var app = angular.module('seducApp', ['ngRoute', 'ngResource', 'ngSanitize', 'ngAnimate', 'ui.tinymce', 'mgcrea.ngStrap.tooltip',
'mgcrea.ngStrap.datepicker', 'mgcrea.ngStrap.alert', 'ui.select', 'uuid4', 'rt.popup', 'angular-md5', 'mgcrea.ngStrap.button',
'ui.bootstrap.tabs', 'mgcrea.ngStrap.timepicker', 'naif.base64', 'base64', 'angular-smilies', 'angular-google-adsense',
'angularFileUpload', 'angular.directives-round-progress', 'numericbinding', 'ngImgCrop', 'ui.tree', 'timer',
'$httpProviderConfig', '$compileProviderConfig', '$locationProviderConfig', 'uiSelectConfig', 'datetimeFilter',
'cutFilter', 'groupFilter', 'partitionFilter', 'aDisabledDirective']);

查看Angular DI docs了解有关主题

的更多详情

答案 1 :(得分:0)

首先你可以试试这段代码吗?

app.factory('siteRepository',['$resource','$http', function ($resource, $http) {
   return {
    checkSiteStatus: function () {
        return $resource('/Home/GetSiteStatus').query();
    },
    getSiteStatus: function () { 
        return $http.get('/Home/GetSiteStatus') 
    },        
    getSiteChangeLog: function () {
        return $http.get('/Home/GetSiteChangeLog')
    }
  }
}]);

如果这项工作,您在缩小和注射方面遇到了经典问题。

我建议您查看https://github.com/olov/ng-annotate或重写应用程序中的所有注入语法(使用依赖项名称数组)

如果有帮助和/或您是否需要更多帮助,请告诉我。