我有这样的工作代码:
服务(工厂?):
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()。一旦我提出更准确的内容,我就会尝试更新我的问题标题。
答案 0 :(得分:0)
如果需要在服务中转换服务器响应,则应将let c1 = Contact(name:"Mike Smith",email:"mike@smith.com")
let c2 = Contact(name:"John Doe",email:"john1@doe.com")
let c3 = Contact(name:"John Doe",email:"john2@doe.com")
let c4 = Contact(name:"Jane Doe",email:"jane2@doe.com")
let c5 = Contact(name:"Jane Doe",email:"jane1@doe.com")
let people = [c1, c2, c3, c4, c5]
print(people) // "[Mike Smith - mike@smith.com, John Doe - john1@doe.com, John Doe - john2@doe.com, Jane Doe - jane2@doe.com, Jane Doe - jane1@doe.com]\n"
print(people.sorted()) // "[Jane Doe - jane1@doe.com, Jane Doe - jane2@doe.com, John Doe - john1@doe.com, John Doe - john2@doe.com, Mike Smith - mike@smith.com]\n"
移到那里。但是,如果then
应该解包一个promise并为一个值分配一个值,就像上面的代码一样,这是不实际或不可能的。
then
返回一个在promise解析中填充的对象。资源应该在视图中使用的方式是:
$reaource
更新对象时,它也会在视图中更新。将值分配给另一个变量效率很低。
不可能做像
这样的事情{{Roles.length}}
因为$scope.RolesCount = MyService.getRolesCount();
是异步的,它解析的值是标量。可以使用`async..await,(TypeScript或ES2017)将其展平,但需要额外的措施来将控制流与AngularJS摘要同步,如this answer中所述。