7

我在 javascript 方面很糟糕,对 Angular 也很陌生,所以请多多包涵。

我的服务器返回这个:

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

服务.js

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

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

控制器.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

我知道这eventDetail是一个resource实例,但我如何直接获取这些值?

如果我$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);
  });
}

如果您出于某种原因不想使用 aresource您可以使用该$http服务

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