У меня есть функция, которая возвращает массив элементов по идентификатору группы. Вот:
var getChoices = function (groupId) {
var request = $http.get(_baseUrl + 'choice', { params: { choiceGroupId: groupId } });
return request.then(function(result) {
if (resources.ok(result)) {
return result.data.items;
}
}, function(error) {
});
}
Он отлично работает, когда я привязываю его к кнопке, но когда я пытаюсь сделать ng-repeat над результатами этой функции, у меня есть несколько ошибок в консоли браузера.
<md-list>
<md-list-item ng-repeat="choice in getChoices(choiceGroupId)">
{{choice}}
</md-list-item>
</md-list>
Я тоже стараюсь, но результат тот же.
<md-list ng-init="choices = {{getChoices(choiceGroupId)}}">
<md-list-item ng-repeat="choice in choices">
{{choice}}
</md-list-item>
</md-list>
Я видел ответы на такие вопросы, но люди предлагали сделать запрос в контроллере, затем заполнить массив данными и перебрать значения массива, но это не подходит моему случаю, потому что мне нужен этот choiceGroupId
из пользовательского интерфейса боковая сторона.
Похоже, браузер пытается оценить запрос запроса на каждый тик, и происходит что-то вроде переполнения. Как я могу обработать это, чтобы вызвать "get" один раз, а затем перебрать полученный результат?
Проверьте Если переменная выбора имеет дублирование значения, если да, чем пример ниже кода
<md-list>
<md-list-item ng-repeat="choice in choices track by $index">
{{choice}}
</md-list-item>
</md-list>
var getChoices = function (groupId) {
var request = $http.get(_baseUrl + 'choice', { params: { choiceGroupId: groupId } });
return request.then(function(result) {
if (resources.ok(result)) {
$scope.choices= result.data.items;
}
}, function(error) {
});
}
scope.choices = return result.data.items;
вместоreturn result.data.items;
и используйте ng-repeat следующим образом:ng-repeat="choice in choices"
. В ng-init вам просто нужно вызватьgetChoices(choiceGroupId)
чтобы выполнить запрос ajax