1

我正在尝试从 json 数据中获取数据,所以我写了这个:

app.factory('data', function($resource) {
    return $resource('mock/plane_urls.json', {}, {
        getTreeData: { method: 'GET', isArray: false }
    })
})

然后使用:

data.getTreeData.Carriers.Carrier;

其中 Carriers 是 json 文件中的第一个节点。但它不起作用;/我收到错误

错误:data.getTreeData.Carriers 未定义

4

2 回答 2

4

Carriers您正试图在获取对象之前进入该对象。在数据返回之前,Carriers 只是一个空对象。

你可以做类似的事情$scope.carriers = data.getTreeData();,然后在你看来有一个元素ng-repeat="carrier in carriers"

$resource 背后的想法是你得到一个空对象,所以视图什么也不渲染。请求完成后,将替换空对象并自动使用数据重新渲染视图。

您也可以像这样使用 $http 服务并提供一个回调函数,该函数在获取数据后执行。

$http.get('mock/plane_urls.json').then(function(data){
    carrier = data.Carriers.Carrier
});

但!应该把它分解成一个服务和一个控制器。只需让服务getTreeData像这样返回承诺对象:return $http.get('mock/plane_urls.json');然后在您的控制器中使用 then() 调用它并提供成功和错误的回调:

getTreeData.then(
    function(data){
        carrier = data.Carriers.Carrier;
    }, 
    function(err){
        console.log("Error: " + err);
    });
于 2013-07-18T20:57:31.470 回答
1

您可以使用 $scope.$watch 来观察 data.getTreeData 的值。当有新数据进来时,回调将被调用,然后,你可以得到你想要的数据。

http://docs.angularjs.org/api/ng .$rootScope.Scope

于 2013-07-19T00:11:23.970 回答