0

AngularJS コントローラーで配列にアクセスできませんが、ビューでは機能します。

コントローラー内: .resultsundefined を返します

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 に答える