2017-07-22 47 views
1

我試圖從服務發送數據作爲對我的控制器的承諾,但嘗試了幾個選項後沒有運氣。 http服務默認返回一個承諾,但我希望將數據作爲承諾從一個控制器發送到另一個控制器。我的服務類如下所示:add函數用於設置來自另一個控制器的數據,get函數用於在另一個控制器中獲取該數據。如何從服務中返回數據作爲AngularJS的承諾?

服務

return { 


     add : function(incategories){ 
     categories=incategories; 
     console.log(subcategories) 
    }, 

     addcatname:function(incat){ 
     category=incat 
     console.log(category) 
    }, 


     get : function(){ 
     return categories; 
     console.log(category) 
     }, 

     getcatname:function(){ 
     return category; 
     }, 

和從控制器獲取的數據看起來像這樣的功能。

控制器

vm.getSub=function(){ 
      vm.category=CategoryService.getcatname(); 
      vm.subcategories=CategoryService.get(); 
      vm.index = 0; 
      vm.array1 = []; 
      for(var i=0; i<vm.subcategories.length/2;i++) 
      vm.array1.push(i);  
      return true; 
} 

其中值被設定的代碼是:

vm.submit=function(category){ 
      subCategoryService.getsubCategories(category).then(function (response) 
     { 
      console.log(response) 
      CategoryService.addS(response.data.data.category_name); 
      CategoryService.addsub(response.data.data.sunbcategories); 


             }) 
      $location.path('/subcategory');  

} 

我的HTML

<h1 class="header">{{'CATEGORY'|translate}}</h1><br> 
<div ng-controller="CategoriesController as catCtrl" class="category-content"> 
    <table class="table-content" class="category-content" ng-show="catCtrl.getcategories()"> 
<tr ng-repeat="i in catCtrl.array" ng-init="index = i*2"> 
    <td layout-align="space-around center" ng-repeat="category in catCtrl.categories.slice(index,index+2)" > 


      <md-button md-whiteframe="6" ng-click="catCtrl.submit(category)" class="category-button" aria-label="{{category}}"> 
       <div class="category-button-text-translation">{{category|uppercase| translate}}</div> 
       <img ng-src="assets/images/categories/{{category}}.png" alt="{{category}}"> 
       <div class="category-button-text-english">{{category|lowercase}}</div> 
      </md-button> 
      <span flex></span> 
    </td> 
</tr> 
    </table> 
</div> 

從subCategoryService.getsubCategories數據(美食血腥)來自$ http服務,並且在獲得該數據後,我將這些值設置爲服務,以便其他控制器可以訪問它們。

現在我想讓函數的前兩行接收數據作爲服務的承諾。我將如何做到這一點?之前,每次我從$ http服務獲取數據時都是這樣,所以我沒有任何問題,但現在我有點失落。謝謝!!

+0

是這個getCatName並且在服務中獲得功能是http服務(承諾)?請您發佈確切代碼 – JEMI

+0

getCatName並獲取函數只是getter。這些值是在我放在它們上面的添加函數中設置的。設置值的代碼將在文章的上方添加。 – BleachedAxe

+0

所以你想讓它定製承諾? – JEMI

回答

1

如果你想get和getcatname定製答應你應該使用$ Q服務。在序做你的服務注入$ Q服務,並使用如下

getcatname:function(){ 
     //$q please inject $q on your service 
     ̶l̶e̶t̶ ̶d̶e̶f̶e̶r̶ ̶=̶ ̶$̶q̶.̶d̶e̶f̶e̶r̶(̶)̶;̶ 

     ̶d̶e̶f̶e̶r̶.̶r̶e̶s̶o̶l̶v̶e̶(̶c̶a̶t̶e̶g̶o̶r̶y̶;̶)̶ 
     return ̶d̶e̶f̶e̶r̶.̶p̶r̶o̶m̶i̶s̶e̶;̶ $q.resolve(category); 
    } 
控制器

,你可以得到在該目錄下的諾言回調

CategoryService.getcatname.then(function(response){ 

vm.category=response; 
}); 

https://docs.angularjs.org/api/ng/service/$q

+0

我像你說的那樣注入了q服務,但它返回undefined。當我沒有使用q服務時,我正在獲取對象,儘管沒有。什麼可能是錯的? – BleachedAxe

+0

@BleachedAxe它未定義? – JEMI

+0

它試圖訪問其他控制器中的get,甚至在它被前一個控制器添加到服務之前。 。不知道我做錯了:( – BleachedAxe