0

Rails を使用して JSON API を提供するアプリを作成しています。ngResourceこれらの json エンドポイントを使用するために Angular モジュールを使用しています。

ngResource正しく構成し (以下を参照)、その結果を$scope変数に保存したり、コンソールにログアウトしたりできますが、サービスを使用してngResource呼び出しを行い、その結果を通常の古いファイルに保存するのに苦労しています。array変数。

この例でGenreは、Rails JSON API にアクセスする というリソースがあります。GenreService「 Genre.index Genre() Array」変数を挿入して作成しようとしcall and store those results into a localます。

ファイルの内容は次のとおりです。

ジャンル.js.コーヒー

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

ジャンルService.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 を使用してみてください (非 coffeescript):

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