Angular $ http结果排序并绑定到视图?

时间:2015-08-17 03:11:25

标签: javascript angularjs

我试图从成功的$ http.get中提取数据来渲染结果,将其推送到两个或三个以几种不同方式对数据进行排序/连接/过滤的函数,并存储其余的应用持续时间。

我有以下服务:

myApp.service('versionService', function($http, $log, $q) {

    var self = this;

    this.issues = {
        all: []
    };

    this.versions = {
        all: [],
        byName: [],
        byID: []
    };


    var query = {};
    query.jql = "fixVersion in unreleasedVersions() ORDER BY fixVersion ASC";

    $http({
        url: '/search/versions',
        method: 'POST',
        //cache: true,
        data: query
    })
        .then(function (response) {
            //console.log(response.data.issues);
            for(var i = 0; i < response.data.issues.length; i++) {
                self.issues.all.push(response.data.issues[i]);
                for(var j = 0; j < response.data.issues[i].fields.fixVersions.length; j++) {
                    self.versions.all.push(response.data.issues[i].fields.fixVersions[j]);
                }
            }
        }, function (err) {
            console.log(err);
        });

});

我的控制器:

 myApp.controller('filteredController', function($scope, $http, $log, versionService) {

    $scope.isActive = function(version) {
        return version == versionService.selectedV;
    };

    $scope.issues = {
        all: versionService.issues.all
    };

    $scope.versions = {
        all: versionService.versions.all,
        byName: versionService.versions.byName,
        byID: versionService.versions.byID
    };

});

无论我如何尝试这样做,如果我在控制器中的this.versions.byName上放置一个sort / filter / concat,它只会给出一个空白数组作为返回。我猜是因为在http.get和循环完成之前,sort / filter / concat正在运行?显然,这意味着如果我尝试从vesions.byname / ID /

拉出来,视图就不会显示任何内容。

如何运行函数来对数据进行排序/过滤/连接,将其放在版本对象的其他数组中,然后将其绑定到视图中?

我试图使用以下功能:

var versionsByName = function() {

    var prev = null;

    self.versions.byName = self.versions.all
        .concat()
        .sort()
        .filter(function (i) {
            if (i.name !== prev.name) {
                prev = i;
                return true;
            }
        })

};

无论我把它放在哪里,或者如果我把它作为IIFE,它都不会起作用。

0 个答案:

没有答案