【问题标题】:angular js - getting json dataangular js - 获取 json 数据
【发布时间】:2013-07-18 20:42:12
【问题描述】:

我正在尝试从 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 未定义

【问题讨论】:

    标签: javascript html json angularjs


    【解决方案1】:

    您正试图在获取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);
        });
    

    【讨论】:

    • 我需要在脚本中获取这些数据。有没有其他方法来获取它?
    • 周陀杨的方法会奏效。你也可以使用 $http 对象来发送你的请求并提供一个回调函数来访问Carriers.carrier
    • 我已经更新了我的答案,提供了有关使用 $http 和回调的更多详细信息。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-09
      • 2016-11-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多