2013-07-18 30 views
1

我想,所以我写这篇文章,以获得从JSON数据数据:角JS - 让JSON数据

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

,然后使用:

data.getTreeData.Carriers.Carrier; 

如果运营商是JSON文件中的第一个节点。但它不工作; /我有错误

Error: data.getTreeData.Carriers is undefined

回答

4

您正在尝试将手伸入Carriers对象之前,它是牵强。在数据回来之前,运营商只是一个空洞的对象。

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

元素背后$资源的想法是,你会得到一个空的对象,因此该视图渲染什么。请求完成后,将替换空对象,并自动使用数据重新呈现视图。

你也可以像这样使用$ http服务,并提供一个回调函数,一旦数据被提取就执行。

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

但是!应该把它分解成服务和控制器。只要有服务getTreeData返回承诺对象,像这样:return $http.get('mock/plane_urls.json');,然后在您的控制器调用它与当时的(),并为成功和错误回调。

getTreeData.then(
    function(data){ 
     carrier = data.Carriers.Carrier; 
    }, 
    function(err){ 
     console.log("Error: " + err); 
    }); 
+0

我需要在脚本中获取这些数据。有另一种方法来获取它吗? – Mariola

+0

杨杨涛的做法会奏效。你也可以使用$ http对象发送你的请求,并提供一个回调函数来访问'Carriers.carrier' – Hippocrates

+0

我已经更新了我的答案,详细介绍了使用$ http和回调。 – Hippocrates

1

您可以使用$范围$腕表以制表data.getTreeData的值。 当新数据进入时,回调将被调用,然后,您可以获取所需的数据。

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