将Angular服务注入控制器会导致$ injector:unpr错误(使用AngularBooter)

时间:2015-04-25 20:15:19

标签: angularjs angularjs-service angularjs-controller

我在我的应用中使用AngularBooter for Angular。

这是我的代码:

emp.boot();

emp.services.SocialService = ['$http', '$q', function ($http, $q) {

    var deferred = $q.defer();

    $http.get('/api/feed').then(function (data) {
        deferred.resolve(data);
    });

    this.getStatuses = function ()
    {
        return deferred.promise;
    }

}];

emp.controllers.StatusesController = ['$scope','SocialService', '$interval',  function($scope, SocialService, $interval) {

    var statuses = SocialService.getStatuses();

    statuses.then(function(data) {
        $scope.statuses = data;
        console.log($scope.statuses);
    });
}];

根据我的理解错误:Error: [$injector:unpr]表示服务未正确注册或实施,我尝试过一些事情,但仍然遇到同样的问题。任何想法。

1 个答案:

答案 0 :(得分:0)

两个问题:

1)您在注册之前正在启动(至少在您提供的代码中)。在定义了所有内容之后,在底部做emp.boot()

2)您的服务没有返回任何内容。例如,如果你在服务函数的最底部添加return {};,那么它应该不会再抛出错误,但你可能想要返回一些比这更有趣的东西。

您可以通过取消注释返回对象的行并查看Angular再次开始工作来查看此操作。 http://codepen.io/alex-wilmer/pen/QbwNGz?editors=101

我想你可能想要这样的东西:

emp.services.SocialService = ['$http', '$q', function ($http, $q) {
  var deferred = $q.defer();

  $http.get('/api/feed').then(function (data) {
    deferred.resolve(data);
  });

  return {
    getStatuses = function () { // don't mix brace placement!
      return deferred.promise;
    }
  };
}];