Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 解决$resource承诺后从服务返回值_Angularjs_Angular Promise_Ngresource_Angularjs Ng Resource - Fatal编程技术网

Angularjs 解决$resource承诺后从服务返回值

Angularjs 解决$resource承诺后从服务返回值,angularjs,angular-promise,ngresource,angularjs-ng-resource,Angularjs,Angular Promise,Ngresource,Angularjs Ng Resource,我有这样的工作守则: 服务(工厂?): 控制器: $scope.Roles = MyService.getRoles(); $scope.Roles.$promise.then(function () { $scope.RolesCount = $scope.Roles.length; }); 我想做的是在MyService中创建这样一个函数,一旦解析getRoles,它将返回角色数,这样我就可以在controller中使用它,如下所示: $scope.RolesCount = MyServi

我有这样的工作守则:

服务(工厂?):

控制器:

$scope.Roles = MyService.getRoles();
$scope.Roles.$promise.then(function () { $scope.RolesCount = $scope.Roles.length; });
我想做的是在MyService中创建这样一个函数,一旦解析getRoles,它将返回角色数,这样我就可以在controller中使用它,如下所示:

$scope.RolesCount = MyService.getRolesCount();
然后是html

{{RolesCount}}

不幸的是,我不知道怎么做,因为我的getRolesCount()方法需要返回一些东西,所以我不能在MyService中使用$promise.then()。一旦我想出更准确的答案,我会尝试更新问题的标题。

如果需要在服务中转换服务器响应,则应将
移动到那里。但是,如果
然后
应该打开一个承诺并为范围指定一个值,这既不实际也不可能,就像上面的代码一样

$resource
返回承诺解析时填充的对象。在视图中使用资源的方式是:

{{Roles.length}}
更新对象时,它也将在视图中更新。将值赋给另一个变量效率很低

做这样的事是不可能的

$scope.RolesCount = MyService.getRolesCount();

因为
getRolesCount
是异步的,它解析的值是标量。可以使用'async..await'(TypeScript或ES2017)将其展平,但需要额外的措施以使控制流与AngularJS摘要同步,如中所述。

如果需要在服务中转换服务器响应,则应将
移动到那里。但是,如果
然后
应该打开一个承诺并为范围指定一个值,这既不实际也不可能,就像上面的代码一样

$resource
返回承诺解析时填充的对象。在视图中使用资源的方式是:

{{Roles.length}}
更新对象时,它也将在视图中更新。将值赋给另一个变量效率很低

做这样的事是不可能的

$scope.RolesCount = MyService.getRolesCount();

因为
getRolesCount
是异步的,它解析的值是标量。可以使用'async..await.(TypeScript或ES2017)将其展平,但需要额外的措施来同步控制流与AngularJS摘要,如中所述。

您应该使用
操作重新定义getRoles操作
选项,并提供transformResponse,是的,但听起来像是在资源/存储库层上操作。若我想在服务层上处理返回的数据(这不是它的用途吗?),然后将结果返回给控制器(作为对象引用,与$resource的方式相同)?是的,服务是更合适的位置。但是在您的例子中,这些方法都不起作用,因为
然后
不仅转换响应,而且打开它的值。此外,您实际上不需要对资源执行此操作。您应该使用
操作
选项重新定义getRoles操作,并提供transformResponse,类似这样的功能。是的,但听起来像是在资源/存储库层进行操作。若我想在服务层上处理返回的数据(这不是它的用途吗?),然后将结果返回给控制器(作为对象引用,与$resource的方式相同)?是的,服务是更合适的位置。但是在您的例子中,这些方法都不起作用,因为
然后
不仅转换响应,而且打开它的值。此外,您实际上不需要使用资源来实现这一点。