1

我有这样的工作代码:

服务(工厂?):

myApp.factory('MyService', ['$q','$resource', 'MyResource',
    function ($q, $resource, MyResource) {

        return {
            getRoles: function () {
                return MyResource.getRoles(); //MyResource makes API calls using $resource 
            } } });

控制器:

$scope.Roles = MyService.getRoles();
$scope.Roles.$promise.then(function () { $scope.RolesCount = $scope.Roles.length; });

我想做的是在 MyService 中创建这样的函数,一旦 getRoles 被解析,它将返回角色的数量,这样我就可以在控制器中使用它,如下所示:

$scope.RolesCount = MyService.getRolesCount();

然后在 html

{{RolesCount}}

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

4

1 回答 1

0

如果需要在服务中转换服务器响应,then则应将其移到那里。then但是,如果应该像上面的代码那样解开一个承诺并为范围分配一个值,那么这是不切实际或不可能的。

$resource返回一个在承诺解决方案上填充的对象。资源应该在视图中使用的方式是:

{{Roles.length}}

当一个对象被更新时,它也会在视图中更新。将值分配给另一个变量是低效的。

不可能做类似的事情

$scope.RolesCount = MyService.getRolesCount();

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

于 2017-10-04T22:59:56.967 回答