gpt4 book ai didi

javascript - 如何从服务返回数据作为 AngularJS 中的 promise ?

转载 作者:行者123 更新时间:2023-11-30 21:20:18 25 4
gpt4 key购买 nike

我正在尝试从服务发送数据作为对我的 Controller 的 promise ,但在尝试了几个选项后没有成功。 http 服务默认返回一个 promise ,但我想将数据作为 promise 从一个 Controller 发送到另一个 Controller 。我的服务类如下所示:add 函数用于从另一个 Controller 设置数据,get 函数用于在另一个 Controller 中获取该数据。

服务

    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;
},

从 Controller 获取数据的函数如下所示。

Controller

 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(category) 的数据来自 $http 服务,在获取该数据后,我在服务中设置值,以便另一个 Controller 可以访问它们。

现在我希望函数的前两行按照服务的 promise 接收数据。我怎样才能做到这一点?以前,每次我从 $http 服务获取数据,所以我没有问题,但我现在有点迷路了。谢谢!!

最佳答案

如果你想让 get 和 getcatname 成为自定义 promise ,你应该使用 $q 服务。为了做到这一点,请在您的服务上注入(inject) $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);
}

在 Controller 中你可以通过 promise 回调获取这个类别

CategoryService.getcatname.then(function(response){

vm.category=response;
});

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

关于javascript - 如何从服务返回数据作为 AngularJS 中的 promise ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45259065/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com