7

私はjavascriptが苦手で、Angularは初めてなので、ご容赦ください。

私のサーバーはこれを返します:

{"latitude": 3.172398, "name": "Event", "longitude": 101.6739005}

services.js

var mapModule = angular.module('map.services', ['ngResource']);

mapModule.factory('Event', function($resource) {
    return $resource('/custom_api/get_event_details/:eventId/',
        {eventId: '@id'});
});

controller.js

function mapCtrl($scope, Event) {
    var eventDetail = Event.get({eventId: $scope.eventId});
    console.log(eventDetail);
    console.log(eventDetail.latitude);
}

サーバーから返されたjsonにアクセスしようとしていますeventDetail.latitudeが、undefined.

コンソールでは、console.log(eventDetail)次のようになります。

e {$get: function, $save: function, $query: function, $remove: function, $delete: function}
latitude: 3.172398
longitude: 101.6739005
name: "abc"
__proto__: e

これeventDetailresourceインスタンスだと思いますが、値を直接取得するにはどうすればよいですか?

コントローラーで設定した場合、テンプレート$scope.eventDetailからアクセスできます。{{ eventDetail.latitude }}

コントローラーでこれを行うにはどうすればよいですか?

4

1 に答える 1

9

ドキュメントから:

$resource オブジェクト メソッドを呼び出すと、すぐに空の参照 (isArray に応じてオブジェクトまたは配列) が返されることに注意してください。サーバーからデータが返されると、既存の参照に実際のデータが取り込まれます。

したがって、次のようにコールバック関数に入れない限り、ロギングは機能しません。

function mapCtrl($scope, Event) {
  Event.get({eventId: $scope.eventId},function(eventDetail){
    //on success callback function
    console.log(eventDetail);
    console.log(eventDetail.latitude);
  });
}

何らかの理由で を使用したくない場合は、次のサービスresourceを使用できます。$http

$http.get(url).then(function(response){console.log(response.data);});
于 2013-04-24T16:24:08.317 に答える