所以我试图开始使用Angular服务来为我提取数据。
目前我有这项服务从我的rails服务器获取媒体:
angular.module('Test').factory 'MediaShow', ($resource, $http, $routeParams) ->
class Comments
constructor: (errorHandler) ->
@service = $resource('/media/:id.json',
{id: $routeParams.id},
{'query': { method: 'GET', isArray: false }}
)
@errorHandler = errorHandler
defaults = $http.defaults.headers
defaults.patch = defaults.patch || {}
defaults.patch['Content-Type'] = 'application/json'
create: (attributes, successHandle) ->
new @service
new @service(list: attributes).$save ((list) -> successHandler(list)), @errorHandler
all: ->
@service.query((-> null), @errorHandler)
在这里,我尝试在我的一个控制器中使用all()
函数:
$scope.init = ->
@mediumService = new MediaShow(serverErrorHandler)
requestedData = @mediumService.all()
$scope.medium = requestedData.medium
console.log($scope.medium)
keys = []
for key of requestedData
keys.push key
console.log(keys)
以下是我在控制台中看到的一切:
正如您所看到的,媒体对象确实存在于我从服务器获取的数据中。但由于某种原因,我无法访问它。
我在这里做错了什么?
答案 0 :(得分:1)
键medium
未出现在输出中,因为在您生成该输出的位置不存在。当AJAX请求实际完成时,属性medium
将出现在控制台日志之后的某个位置。
属性确实存在于控制台的对象资源管理器中,因为它会随着对象的更改而动态更新。它将始终显示对象的当前状态。
我对Angular一无所知,但你的all
方法似乎正在回复一个承诺。您几乎肯定需要等待该承诺完成,然后访问medium
中的数据。
类似的东西:
scope.init = ->
@mediumService = new MediaShow(serverErrorHandler)
requestedData = @mediumService.all()
requestedData.done (data) =>
$scope.medium = data.medium
console.log($scope.medium)
keys = []
for key of requestedData
keys.push key
console.log(keys)