注入由 module.provider 定义的服务

Injecting service which define by module.provider

很抱歉问这样的问题,但我已经花了几天时间来解决这个问题。 但我真的需要帮助。我已经阅读 Understanding Dependency Injection 以及其他堆栈问题 使用 $喷油器 on run block 在我的代码中也不起作用。

也许这里有人可以帮助我,我也很担心如何在我的提供程序上注释注入以进行缩小。

My code in 

Here

问题是,当您在 _getItem 中调用 $http 时,您在 "controller" 中。解决方案可能是这样做:

  this.$get = function($http) {
    return {
      mainUrl : _mainUrl,
      getItem : _getItem,
      httpWrapper : $http
    };

然后在_getItem赋值(或者直接使用httpWrapper):

var $http = this.httpWrapper;

为了避免缩小出现问题,您可以将注入添加到方法 $get:

  this.$get =   ['$http', function($http) {

这里是更新的 Plunker:http://plnkr.co/edit/m7oXNolo6iV8Zy1NJ0vx

编辑:我认为你想要实现的是:

  var _getItem = function() {
    var _d = null;
            console.log(this)
    var $http = this.httpWrapper;
    var $q = this.qWrapper;
     _d = $q.defer();
    $http.get(_mainUrl)
    .success(function(data) {
      console.log(data);
      _d.resolve( {data: data, x: "efe"} );
    })
    .error(function(status) {
      _d.resolve( status );
    });
    return _d.promise;
  };

$q.defer() 允许将 http 调用延迟到您的控制器,然后在您的控制器上您必须编辑此内容:

facade.getItem().then(function(data){
  $scope.myReturn = data;
}

Updated Plunker: http://plnkr.co/edit/xR1d3KnWhX51jHHZ8t3m

注意:考虑到then的本质是异步的,所以如果你之后直接使用变量,它仍然是undefined