当我把它放在一个包

时间:2017-08-30 14:41:40

标签: c# .net angularjs asp.net-mvc

我的_Layout.cshtml中的当前设置我有标准脚本标记,文件路径指向一些angularjs文件,如此。

<script src="~/Scripts/angularjs/Controller/MyController.js"></script>...(plus a few more)

因此,我没有明确地将所有这些文件放在_layout文件中,而是将它们捆绑在一起。所以我在BundleConfig.cs中这样做了。

 bundles.Add(new ScriptBundle("~/Scripts").Include(
 "~/angularjs/Factory/authService.js",
"~/angularjs/Controller/MyController.js"));

一切都在建立。但是,当我运行它时,浏览器控制台窗口给我一个角度错误,说它无法找到我的authService.js文件。官方错误如下。

  

未捕获错误:[$ injector:unpr] http://errors.angularjs.org/1.5.8/ $ injector / unpr?p0 = authServiceProvider%20%3C-%20authService

所以我的问题是为什么当我捆绑我的脚本时它没有看到authService文件。请记住,如果我明确地称它,我的角度和网页工作正常,没有错误。 (我也搞乱了我在捆绑中调用它们的顺序,但仍然无法使网页正常工作)。

非常感谢任何帮助。

编辑:这里提供一些角度代码是我的服务。

(function () {

    var authService = function ($http, $q, localStorageService) {
    /*bunch of code*/
 };

    var module = angular.module("mainApp");

    module.factory("authService", authService);



}());

所以我做了以下更改,但我仍然得到相同的错误以及Web浏览器中的另一个错误&#34; ~Scripts / angularjs&#34;回复403错误。

(function () {

    var module = angular.module("mainApp");

    module.factory("authService", authService);

    authService.$inject("$http", "$q", "localStorageService");

    var authService = function ($http, $q, localStorageService) {
/*my code*/
};
}());

最终解决方案: 为了澄清,我将发布我所做的工作以使其发挥作用。正如@Tommaso Sebastianelli所指出的那样,关键在于传递[]中的行module.factory的依赖关系。非常感谢您的迅速回应。

(function () {

    var authService = function ($http, $q, localStorageService) {
/*my code here*/

 };
    var module = angular.module("mainApp");

    module.factory("authService", ["$http", "$q","localStorageService", authService]);

}());

1 个答案:

答案 0 :(得分:2)

您的角度服务中是否可能存在非显式依赖注入?例如:

yourapp.service('authService', function(dependancy1, dependancy2, etc){

});

在最小化和捆绑模块时,这种错误多次发生在我身上。 如果是这种情况,请修改您的代码:

yourapp.service('authService', ['dependancy1', 'dependancy2', '...',
   function (dependancy1, dependancy2, etc){

}]);

最佳选择

yourapp.service('authService', authService);

authService.$inject = ['dependency1', 'dependency2', '...'];

function authService(){
//code here
}