2015-01-08 89 views

回答

0

的问题是,当你调用在_getItem你在 “控制器” $http。一个解决办法是要做到这一点:

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 Plunkerhttp://plnkr.co/edit/xR1d3KnWhX51jHHZ8t3m

注意:考虑ŧ帽子then的性质是异步的,因此如果你以后直接使用该变量,它仍然是未定义的

+0

好的谢谢老兄,它的工作原理。但是,你能告诉我再举一个例子吗?因为当我想在本地范围上创建一个被拒绝的对象时,它已经被取消了。我想要在本地范围内的1个对手。 –

+0

好的谢谢,我标记。但任何参考?当我尝试在服务上进行服装回调(错误和成功),并在控制器上调用它(附加到$ scope的响应或错误消息)时,我遇到了问题 –

+0

对于$ q和推迟,您可以检查:http:// lostechies .COM/gabrielschenker/2014/02/04/angularjspart-11-承诺/。 – Michael

相关问题