Я использую typeahead UI-bootstrap для фильтра поиска, теперь я использую данные от контроллера, но я хочу, чтобы данные из JSON использовались с помощью $ http. Но я не могу принимать данные из запроса $ http в функции фильтра.использовать функцию фильтра используя http-запрос в угловом
текущий код
// Search Control
vm.searchCtrl = "";
var searchitems = [{
"name": "Adventure",
"category": "Activities"
}, {
"name": "Cycling",
"category": "Activities"
}, {
"name": "Local guided tours",
"category": "Activities"
}, {
"name": "Delux room",
"category": "Accommodations"
}, {
"name": "Super Delux room",
"category": "Accommodations"
}, {
"name": "Goa",
"category": "Destinations"
}, {
"name": "Bengaluru",
"category": "Destinations"
}];
vm.getSearchitems = function (search) {
var filtered = filterFilter(searchitems, search);
var results = _(filtered).groupBy('category').map(function (g) {
g[0].firstInCategory = true;
return g;
}).flatten().value();
return results;
}
Но сейчас я хочу, как этот
$http.get('../assets/data/search.json').then(function (response) {
return vm.searchitems = response;
});
vm.getSearchitems = function (search) {
var filtered = filterFilter(searchitems, search);
var results = _(filtered).groupBy('category').map(function (g) {
g[0].firstInCategory = true;
return g;
}).flatten().value();
return results;
}
Но "searchitems" не получают.
Поскольку это асинхронный вызов, это может не возвращать данные во время выполнения функции. Либо вводите в контроллер, либо сохраняйте объект кеш/сервис во время первого попадания веб-сайта. –
Эти асинхронные проблемы возникают постоянно в Angular. См. Мой ответ ниже, который показывает, как вызывать функцию только после того, как $ http возвращает данные. – Toddsden