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 回答