0

我无法访问 AngularJS 控制器中的数组,但它可以在视图中使用。

在控制器中:.results返回未定义

function TwitterCtrl($scope, $resource){

  $scope.twitter = $resource('http://search.twitter.com/:action',
      {action:'search.json', q:'angularjs', callback:'JSON_CALLBACK'},
      {get:{method:'JSONP', params: {rpp: 4}}});

    $scope.twitterResult = $scope.twitter.get({q:"example"});

    //returns the resource object
    console.log($scope.twitterResult)

    //returns undefined
    console.log($scope.twitterResult.results);
}

在视图中:.results返回推文数组

//This returns an array of tweets
{{$scope.twitterResult.results}}
4

1 回答 1

5

$resource 调用是异步的,但 $resource 服务在resource.get调用时立即返回一个空白对象(或在调用时返回空数组resource.query)。然后,只有在 promise 得到解决(服务器返回响应)之后,$resource 服务才会将实际结果分配给$scope.twitterResult变量。

这就是为什么$scope.twitterResult立即访问(console.log)时为空白,但在您看来(似乎)“有效”。

您的视图表达式{{$scope.twitterResult.results}}一开始也是未定义的,但 Angular 的 $parse 服务(负责解析视图表达式)不会输出undefined,因为它被设计为不输出。一旦收到服务器响应,视图表达式就会更新并twitterResult.results显示出来。

于 2013-03-17T20:41:48.420 回答