Я знаю, что эта проблема уже упоминалась несколько раз раньше, но я не мог заставить меня работать ни на одно из этих решений.
В моем контроллере у меня есть функция, которая предназначена для вызова из цикла ng-repeat. Ng-repeat выполняет итерацию по списку серверов, и эта функция вызывается с помощью метода в представлении, чтобы получить некоторые данные среды об этом сервере.
Эта функция, кажется, является корнем проблемы, но я не могу понять, как ее исправить.
Функция контроллера:
function getServHead(data) {
SearchFactory.servHeader(data).then(
function (response) {
$log.info(response);
vm.searchData.server.sh = response;
return vm.searchData.server.sh;
},
function (error) {
$log.error('Error getting server header data', error);
vm.getTeamHeadInfoError = 'Error retrieving server header data';
})
}
Вот пример данных, я получаю обратно:
{
"name": "dcsql01",
"isVirtual": false,
"os": "Windows",
"isInDMZ": false
}
Как я звоню с точки зрения:
<tr ng-repeat="server in vm.searchData.server">
<td>
<a href="/server/{{server.Name}}">
{{vm.getServHead(server.AssetID)}}
<span ng-if="vm.searchData.server.sh.isVirtual == true" class="fa fa-cloud fa-lg"> </span>
<span ng-if="vm.searchData.server.sh.isVirtual != true"class="fa fa-tasks fa-lg"> </span>
<span ng-if="vm.searchData.server.sh.isInDMZ == true" class="fa fa-user-secret fa-lg"> </span>
<span ng-if="vm.searchData.server.sh.isInDMZ != true" class="fa fa-university fa-lg"> </span>
<span ng-if="vm.searchData.server.sh.os == 'windows' || 'Windows'" class="fa fa-windows fa-lg"> </span>
<span ng-if="vm.searchData.server.sh.os == 'linux' || 'Linux'" class="fa fa-linux fa-lg"> </span>
{{server.Name}}</a>
</td>
<td>
<td> <span class='health'>100</span> </td>
</td>
</tr>
Я ve попытался вернуть ответ GET, например, страницу с угловыми подсказками для этой ошибки, и попробовал различные другие ответы SO на эту вопрос, но я все еще сталкиваюсь с той же проблемой.
Если кто-то может дать некоторое представление о том, что я делаю неправильно, было бы весьма полезно.
EDIT:
сервера список вызовов в контроллере:
function getServers() {
SearchFactory.getServer(searchID).then(
function (response) {
$log.info(response);
vm.searchData.server = response;
},
function (error) {
$log.error('Error getting server search data', error);
vm.getServerInfoError = 'Error retrieving server search data';
})
}
Это выполняется при инициализации и передает то, что в Params (searchID) к API, который возвращает базовый массив объектов сервера.
Действительно плохая идея инициализации Ajax запросов от функции вида. Сначала эта функция ничего не возвращает, и она будет вызываться как минимум дважды за цикл дайджест за каждый повторяющийся элемент. Должно быть сделано в сочетании с другим запросом данных в службе – charlietfl
Сбивание с толку, какая цель с тех пор, как каждый запрос 'getServHead()' перезаписывает весь объект 'vm.searchData.server.sh' – charlietfl
Таким образом, функция возвращает запрошенные данные, переходит в бесконечный цикл. Я решил, что возвращенный объект просто перезапишет каждый звонок и будет в порядке, но, очевидно, это не так. Что было бы лучше? –