Angular:访问控制器中的资源值

时间:2013-04-24 15:31:40

标签: javascript angularjs

我对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);
}

我正在尝试通过eventDetail.latitude访问我的服务器返回的json,但我得到了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 }}访问它。

我如何在控制器中执行此操作?

1 个答案:

答案 0 :(得分:9)

来自the docs

  

重要的是要意识到调用$ 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 service

$http.get(url).then(function(response){console.log(response.data);});