2015-01-08 34 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

相關問題