我试图从成功的$ 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,它都不会起作用。