Я сейчас пытаюсь сделать следующее, к сожалению, безуспешно:
По сути, у меня есть массив объектов, где для каждого объекта кнопка создается динамически с помощью директивы ng-repeat. При нажатии на кнопку новый объект добавляется к указанному массиву (данные будут отправлены на сервер через вызовы API, сервер обновит список внутренне и отправит новый массив с новым объектом, добавленным обратно в представление).
То же самое касается удаления элементов из этого массива.
Вот небольшой пример кода, который я имею в виду:
<span ng-repeat="x in allElements">
<button class="btn btn-primary" id="elementButtons">{{x.id}}</button>
</span>
В $ scope.allElements будет столько же кнопок, сколько элементов.
Тогда есть еще эта кнопка, которая в основном заставляет массив сбрасываться до 0 элементов:
<button id="clearAllElements" type="button" class="btn btn-danger"
data-toggle="button" ng-click="deleteAllElements()">Clear all</button>
Функция $ scope.deleteAllElements () вызывает API для удаления всех элементов с сервера и извлекает новый (пустой) массив с сервера, присваивая его $ scope.allElements.
Теперь, как я могу обновить вид, не обновляя всю страницу так, чтобы перезагружались только созданные кнопки?
Спасибо за любые ответы заранее,
a.j.stu
EDIT:
Эта функция вызывается при добавлении элемента:
$scope.addElement = function(elementName) {
if ($scope.checkElementName(elementName)) {
var data = {"name": elementName.toUpperCase(),
"type": /*retrieve type of element from html element*/}
$http.post("api/addElement/", JSON.stringify(data))
.then(function(response) {
$scope.allElements = response.data; //the api call adds the element in the backend and returns an array with all elements appended the new one. This SHOULD refresh the view of all element buttons, but doesn't.
})
.catch(function(response) {
console.log("something went wrong adding element " + elementName);
})
.then(function(response) {
$('#newElementModal').modal('hide'); //#newElementModal is the modal that pops up when clicking a button to add a new element. here the name and type of the element are set and used in the api call above to add the element. Basically, when the modal hides, the view of all buttons should be refreshed.
});
} else {
console.log("invalid identifier of element.");
}
Насколько я понял, вызовы .then () являются асинхронными. Но если после вызова API есть только вызовы .then (), это не должно быть проблемой, верно?