0

私はJSONデータ構造を持っています:

 [
{
"title"  :"a1",
"id"     :"b1",
"name"   :"c1"
},
{
"title"  :"a2",
"id"     :"b2",
"name"   :"c2"
}
 ]       

私がアクセスしているのは外部 JSON であり、ファクトリ メソッドを介して解析されます。コントローラーの Javascript 変数に割り当てたい。

 function Control($scope,data)

 {

 var e=data.query();   /* getting the external JSON data  */
 alert(e[0].title);    

}

それe[0]は未定義であると言います。それをJavascript変数に割り当ててからトラバースできる他の方法はありますか? 助けてください。

4

2 に答える 2

1

さて、$resource はこのように混乱する可能性があります...すぐに戻りオブジェクトへの参照を提供しますが、非同期 AJAX 呼び出しが戻るまでオブジェクトを更新しません...だから...

data.query() からの戻り値を $scope のプロパティに入れると、ビューにバインドすると $watched になるため、更新されます。ただし、単に警告しようとしている場合は、更新される前に値を警告します.. $resource の非同期の側面が原因です。

それ以外の場合は、@MarkRajcok が回答で示した方法で値を取得できます。

$resource query(); を使用する方法の疑似コードの図を次に示します。

app.controller('FooCtrl', function($scope, $resource) {
     var Bar = $resource('/Bar/:id', {id: '@id'});

     // here, we get the result reference and stick it in the scope,
     // relying on a digest to update the value on our screen.
     $scope.data = Bar.query();

     //OR

     //here we already have a reference.
     var test = Bar.query(function() {
          //in here, test has been populated.
          $scope.data2 = test;
     });
     alert(test); //not populated here, yet.

     //OR

     Bar.query(function(x) {
          $scope.data3 = x;
     });
});

これはすべて行われるため、返されるオブジェクトは、$save() などのように事前にインスタンス化された関数を持つことができます。

于 2013-01-17T16:42:01.483 に答える
1

ほとんどの場合、@Marty は正しいです。$resource サービスから query() メソッドを使用している場合、それは非同期です。これはおそらくあなたが望むことをするでしょう:

data.query( function( data ) {
  var e = data;
  alert(e[0].title);
});
于 2013-01-17T15:48:30.670 に答える