我正在尝试从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未定义
答案 0 :(得分: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
});
BUT!应该将其分解为服务和控制器。只需让服务getTreeData
像这样返回promise对象:return $http.get('mock/plane_urls.json');
然后在你的控制器中用then()调用它并提供成功和错误的回调:
getTreeData.then(
function(data){
carrier = data.Carriers.Carrier;
},
function(err){
console.log("Error: " + err);
});
答案 1 :(得分:1)
您可以使用$ scope。$ watch来查看data.getTreeData的值。 当新数据进入时,将调用回调,然后,您可以获得所需的数据。
http://docs.angularjs.org/api/ng。$ rootScope.Scope