即使工厂正在返回对象,也会出现进样器错误

时间:2017-08-30 04:53:04

标签: javascript angularjs

现在和Angular一样,已经有6到7个月了,而且我获得的知识并不多。但是从过去的一天开始,我就陷入了这个错误,如下所示:

  

错误:[$ injector:undef]

     

http://errors.angularjs.org/1.6.5/ $注射器/是undef?P0 = DataService的

     

堆栈追踪:K /< @ http://localhost:64965/Scripts/angular.min.js:7:76

以下是我的服务代码:

(function () {
    var DataService = function ($http) {
        var allItems = function () {
            return $http.get("./data/myData.json").then(function (serviceResp) {
                return serviceResp.data;
            });
        };
    };

    app.factory("DataService", ["$http", DataService]); 
}());

以下是我的控制器代码:

(function () {
    var ItemController = function ($scope, DataService) {
        var allItems = function (data) {
            $scope.collection = data;
        };
    };
    app.controller("ItemController", ["$scope", "DataService", ItemController])
}());

工厂正在返回对象,但我仍然遇到上述错误。我尝试多次清理缓存并多次重启应用程序。

2 个答案:

答案 0 :(得分:0)

您编写服务的方式是错误的。

应该用以下方式编写:

var app = angular.module('ServiceExample',[]);
 var serviceExampleController =
              app.controller('ServiceExampleController', ServiceExampleController);
 var serviceExample = app.service('NameOfTheService', NameOfTheService);

 ServiceExampleController.$inject = ['NameOfTheService'] //protects from minification of js files

function ServiceExampleController(NameOfTheService){
     serviceExampleController = this;
     serviceExampleController.data = NameOfTheService.getSomeData();
 }

function NameOfTheService(){
     nameOfTheService = this;
     nameOfTheService.data = "Some Data";
     nameOfTheService.getSomeData = function(){
           return nameOfTheService.data;
     }     
}

然后在HTML中你可以使用它:

<div ng-controller = "ServiceExampleController as serviceExample">
    {{serviceExample.data}}
</div>

如果您希望使用factory阅读this post

答案 1 :(得分:0)

工厂必须返回值/ obj。你没有回来任何东西。我没有测试过,但它应该可以工作。

(function () {
     var DataService = function ($http) {
         var allItems = function () {
             return $http.get("./data/myData.json").then(function (serviceResp)       {
                 return serviceResp.data;
             });
         };
       return allItems ;

     };


    app.factory("DataService", ["$http", DataService]); 
}());