Fissio的回答
我正在尝试在Angular中创建一个简单的搜索功能。当用户输入输入字段中的某些内容时,我想搜索我的JSON中的所有“标题”,如果一个单词与输入匹配,那么我想要带回与匹配相关的所有对象。
FACTORY
我首先创建了一个Factory,使用Promise从JSON检索数据。
.factory('podcastData', function($http) {
var podcastData = {
async: function() {
var promise = $http.get('http://radio-sante-animale.fr/podcast-data.php').then(function(response) {
return response.data.categories;
})
return promise;
}
};
return podcastData;
})
然后在我的控制器中,我尝试在我的控制器中执行搜索程序。 到目前为止,我设法做了一个for循环,我得到了数组的长度,然后我得到了数组中的所有'Podcasts',然后我设法得到所有与输入匹配的值。
CONTROLLER
更新
$scope.findValue = function(enteredValue) {
console.log(enteredValue);
var filtered = [];
podcastData.async().then(function(data) {
for (i = 0; i < data.length; i++) {
angular.forEach(data[i].podcasts, function(podcasts, key) {
var foundPodcasts = _.filter(podcasts, function(podcast) {
return podcasts.title.toLowerCase().indexOf(enteredValue) >= 0
});
if (typeof foundPodcasts !== 'undefined') {
filtered.concat(foundPodcasts);
console.log(foundPodcasts);
};
});
}
});
}
我更新了我的控制器,现在我确实得到了与搜索输入匹配的所有对象,但是当我在console.log foundPodcasts 时,这是我的回复。这很好!但是,中间有空数组,我无法进行NG-REPEAT,因为没有可以获取的值。
答案 0 :(得分:2)
获得将filtered
更改为数组的自由;我知道你想要找到所有匹配的电影,而在你的代码中你只是在每场比赛中重新创建filtered
对象。
$scope.findValue = function(enteredValue) {
var filtered = [];
podcastData.async().then(function(data) {
for (i = 0; i < data.length; i++) {
var foundPodcasts = _.filter(data[i].podcasts, function(podcast) {
return podcast.title.toLowerCase().indexOf(enteredValue) >= 0
});
if (typeof foundPodcasts !== 'undefined') {
filtered = filtered.concat(foundPodcasts);
};
}
console.log(filtered);
return filtered;
});