У меня есть приложение AngularJS, использующее фреймворк пользовательского интерфейса Angular Material.
Приложение имеет различные механизмы, показывающие диалоги (например, ошибка и счетчик загрузки), и было бы предпочтительнее закрывать только один, специально выбранный в определенных сценариях, например. когда запрос AJAX завершает выборку данных, я хотел бы, чтобы мой счетчик загрузки закрылся, но не диалоговое окно с ошибкой, которое может быть результатом выборки.
То, что я могу найти в документации и коде, не согласуется (хотя код должен выиграть аргумент):
- В документации говорится, что можно закрыть только последнюю версию с необязательный ответ
- Код говорит, что последний, ряд последних или все открытые могут быть закрыты, с необязательным указанием причины
- Пример в документация говорит, что определенный диалог может быть закрыт, с флагом, обозначающим, как и почему
Я сделал демонстрацию своих намерений, как MCV - вот основные моменты:
var dialog = {},
promise = {};
function showDialogs(sourceEvent) {
showDialog(sourceEvent, "one");
showDialog(sourceEvent, "two");
}
function showDialog(sourceEvent, id) {
dialog[id] = $mdDialog.alert({...});
promise[id] = $mdDialog.show(dialog[id]);
promise[id].finally(function() {
dialog[id] = undefined;
});
}
function closeDialogs() {
$mdDialog.hide("Closed all for a reason", {closeAll: true});
}
function closeDialogLatest() {
$mdDialog.hide("Closed from the outside");
}
function closeDialogReason() {
$mdDialog.hide("Closed with a reason");
}
function closeDialogSpecific(id) {
$mdDialog.hide(dialog[id], "finished");
}
EDIT:
Я знаю, что код всегда побеждает в споре о том, что происходит, но я не был полностью уверен, что это правильный код, на который я смотрел.
Я обновил примеры до лучше проверить и проиллюстрировать мою точку зрения и проблему. Это показывает, что все работает, как сказано в коде.
Что я действительно ищу, так это возможно ли достичь моей цели каким-то другим способом, о котором я еще не думал.