【问题标题】:Recursively returning a JSON object from a URL list in Angular JS从 Angular JS 中的 URL 列表递归返回 JSON 对象
【发布时间】:2016-07-29 09:19:08
【问题描述】:

我试图在我的 AngularJS 应用程序中返回一个 JSON 对象。 我有一个链接列表,我必须一个一个地传递它们,将它们附加到初始链接,然后抓取 json 文件并显示它。

到目前为止,即使尝试使用一个链接也不会显示任何结果。

这是我的控制器:

(function () {
    'use strict';
    angular.module('index')
        .filter('resolve', function () {
                return function (x, $http) {
                    $http.get('http://FirstPartOfTheUrl.com' + x)
                        .success(function (data) {
                            return data;
                        })
                        .error(function () {
                            return 'Error Message';
                        });
                }
            }
        })
.controller('indexController', function ($scope, $http) {
    $scope.test = 'https://theUrlIHaveToAppend.com'
})();

这是在我的 HTML 中

<div ng-controller="indexController">
    {{test | resolve}}
</div>

显示页面只是返回 {{测试 |解决}}

请记住,如果我尝试仅打印附加的 url,它确实会显示正确的 url,如果我点击它,我实际上可以获取文件。 我尝试了 AJAX 和异步函数,但问题仍然存在。

至于递归,我将在 div 中应用 ng-repeat,但我需要先使用它。

谢谢

【问题讨论】:

标签: javascript html angularjs json


【解决方案1】:

首先从回调中返回是没有意义的

$http
   .get('http://FirstPartOfTheUrl.com'+x)
   .success(function(data) {
       return data; // this makes no sense.
   });

那么你的问题实际上比这要困难得多。因为您需要破解 Angular filter 基础架构才能使其与异步代码一起使用。

在控制器中解决会更容易

controller('indexController', function ($scope, $http) {
   $http
       .get(url)
       .then(function(data){
          $scope.test = data
       });
})

但是,如果您确实需要将此解析功能实现为过滤器,我建议您使用此包中的 asyncFilter https://github.com/cvuorinen/angular1-async-filter 代码太复杂,无法在此处重现。但总体思路是使用$stateful 过滤器,在每个循环上重新计算。

让您的resolve 过滤器返回一个承诺

.filter('resolve', function($http) {
    return function(x) {
        return $http
           .get('http://FirstPartOfTheUrl.com'+x);
   }
})

并将其通过管道传递给async 过滤器。

{{test | resolve | async}}

【讨论】:

    猜你喜欢
    • 2018-01-09
    • 1970-01-01
    • 1970-01-01
    • 2016-04-15
    • 2012-08-10
    • 2020-10-06
    • 1970-01-01
    • 2014-01-18
    • 2018-10-29
    相关资源
    最近更新 更多