0

我正在编写一个使用 Rails 提供 JSON api 的应用程序。我正在使用 AngularngResource模块来使用这些 json 端点。

虽然我已经ngResource正确配置(见下文)并且可以将其结果存储到$scope变量中或将其注销到控制台,但我很难使用服务进行ngResource调用并将其结果存储到常规旧array多变的。

在此示例中,我有一个名为 的资源Genre,它可以访问我的 Rails JSON api。GenreService注入Genre并尝试创建一个 'Genre.index() call and store those results into a localArray` 变量。

以下是文件内容:

流派.js.coffee

'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"

GenreService.js.coffee

'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()到一个数组中,那么每当我将它记录到控制台时,该数组就会显示为空。

我想知道为什么会这样。我必须使用PromiseAPI 吗?谁能帮我理解为什么会这样?

多谢你们。

4

1 回答 1

1

console.log genreResponse,调用尚未完成,因此您将有一个空数组。

尝试使用 $watch 代替(非咖啡脚本):

$scope.$watch('genreResponse', function (newVal, oldVal) {
  if (newVal) {
    console.log($scope.genreResponse);
  }
});
于 2013-06-20T01:00:14.643 回答