我正在编写一个使用Rails来提供JSON API的应用程序。我正在使用Angular ngResource
模块来使用这些json端点。
虽然我有ngResource
,正确配置(见下文)并且可以将其结果存储到$scope
变量中或将其记录到控制台,但我很难使用服务来进行ngResource
调用并将其结果存储到常规的旧array
变量中。
在这个例子中,我有一个名为Genre
的资源,它访问我的Rails JSON api。 GenreService
注入Genre
并尝试制作'Genre.index()call and store those results into a local
数组`变量。
以下是文件内容:
'use strict'
app = angular.module("ATWP")
app.factory "Genre", ($resource) ->
$resource "/genres/:slug",
slug: "@slug"
,
create:
method: "POST"
index:
method: "GET"
isArray: true
show:
method: "GET"
update:
method: "PUT"
books:
method: "GET"
'use strict'
app = angular.module('ATWP')
genreService = app.factory 'GenreService', (Genre) ->
genreResponse = new Array()
Genre.index((response) ->
genreResponse = response
)
console.log 'Genre Response'
console.log genreResponse
getGenres: ->
genreResponse
此时记录genreResponse
将实际显示一个数组。但是,如果我将GenreService
注入控制器然后将GenreService.getGenres()
的结果存储到数组中,则只要我将其记录到控制台,该数组就会显示为空。
我想知道为什么会这样。我必须使用Promise
API吗?任何人都可以帮助我理解这种情况发生了吗?
谢谢你们。
答案 0 :(得分:1)
当console.log genreResponse
时,呼叫尚未完成,因此您将拥有一个空数组。
尝试使用$ watch代替(非coffeescript):
$scope.$watch('genreResponse', function (newVal, oldVal) {
if (newVal) {
console.log($scope.genreResponse);
}
});