我正在使用$ resource,但可以轻松使用$ http(这可以让这对我有用)......
我喜欢名为User
的服务/工厂,并愿意与之互动:
var user = new User()
user.name() // 'Joe User'
但无论我如何尝试,我只能从我的服务对象获得一个承诺,并且必须使用.then
方法来解决这个承诺。
我无法在User
服务中解决此问题,只是从.name
,.email
等各种方法调用中发送值?
若然,怎么样?
这是我的服务对象(使用CoffeeScript)
'use strict'
class User
constructor: ($resource) ->
@$resource = $resource '/api/v1/users/:id'
current: ->
@$resource.get(id: 'current').$promise
name: ->
# I'd like to call current() here and just get the data.name out of it.
angular.module('myApp').service 'User', ['$resource', User]
我在这里修改了示例以进一步说明我对此感到困惑:
'use strict'
class User
constructor: ($resource) ->
@$resource = $resource '/api/v1/users/:id'
current: ->
@user = @$resource.get(id: 'current')
return @user
angular.module('myApp').service 'User', ['$resource', User]
如果我致电User.current()
,我会:
Resource {$promise: Promise, $resolved: false, toJSON: function, $get: function, $save: function…}
> $promise: Promise
> $resolved: true
> user: Object
> id: 1
> first_name: "Joe"
> last_name: "User"
> __proto__: Resource
所以在我看来,我应该可以致电User.current().user
,但当我这样做时,我会undefined
答案 0 :(得分:1)
但无论我如何尝试,我只能从我的服务对象获得一个承诺,并且必须使用.then方法来解决这个承诺。
承诺是如何运作的。
由于Angular中的服务是单身,所以好处是你不必重复这个动作。不好的是,你必须在某个时刻做一次。
从技术上讲,您可以在app init上执行此操作,运行提取并将其存储到服务变量中。然后,您只需要从控制器读取该变量。
因此,您正处于正确的轨道上,只需确保在应用加载时和用户互动开始之前初始化该服务。
如果您正在寻找开箱即用的解决方案,请考虑将此类数据保存在localStorage或sessionStorage中,具体取决于目的。