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的方式相同)?是的,服务是更合适的位置。但是在您的例子中,这些方法都不起作用,因为然后不仅转换响应,而且打开它的值。此外,您实际上不需要使用资源来实现这一点。