6

私はアプリケーションを開発しています。その中で、私はからjsonデータを取得しています

$http.get() メソッドを使用した外部ファイルは正常に機能しました。今、角度を使用しようとしています

安心のサービス。フィルターでは正常に機能していますが、コントローラーで使用すると

未定義を表示しています。

//Service.js File
angular.module('calenderServices', ['ngResource']).
factory('Events', function($resource){
return $resource('/EventCalender/:File.json', {}, {
query: {method:'GET', params:{File:'events'}, isArray:true}
});
});


        //This is my app Module
angular.module('calender', ['eventFilters','highlight','event','calenderServices']).
config(['$routeProvider', function($routeProvider) {
$routeProvider.
  when('', {templateUrl: 'template.html',   controller: MonthCtrl}).
  otherwise({redirectTo: '/invalid'});
}]);


     //This is my filter.js
angular.module('eventFilters', ['calenderServices']).filter('compare', function(Events) {
var events=Events.query();
alert(events[0].name); //it is displaying the name "Milestone1" });


     //This is my controller.
function MonthCtrl($scope, Events){
var events=Events.query();
    alert(events[0].name); //it is displaying undefined
    }

     //whenever i try to use the variable 'events' in controller, it is displaying undefined or null.  But in filter it is working fine. 
4

1 に答える 1

2

ngResource非同期のhttpリクエストを行うため、以下は機能しません。

var events=Events.query();
alert(events[0].name); // <--- here events is an empty array

通常、あなたがする必要があるのは次のことだけであり、あなたのデータはあなたのビューでレンダリングするために利用可能になります

$scope.events = Events.query()

同期操作のように見えますが、そうではありません。これはAngularの禅です。詳細については、ドキュメントをご覧ください。

getデータをさらに処理するために、成功コールバックをメソッドに渡すこともできます

Events.query(function(events){
    // here you have access to the first event's name
    console.log(events[0].name);
});

これが実際の例です:http://plnkr.co/edit/NDZ2JWjMUoUvtzEuRUho?p = Preview

于 2012-12-13T14:04:33.347 に答える