我有一个AngularJS应用程序使用的角度材料UI框架。
该应用程序具有不同的显示对话框的机制(例如,错误和加载旋转器),最好只关闭在某些情况下特定选择的对话框,例如,当AJAX请求完成获取数据时,我希望我的加载旋转器关闭,但不要关闭任何可能是抓取结果的错误对话框。
我在文档和代码中所能找到的是不一致的(尽管代码应该会赢得争论):
我已经制作了一个演示我的意图,作为传染性软疣病毒 --以下是重点:
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");
}
编辑:
我知道代码总是赢得关于发生什么的争论,但我并不完全确定这是我所看到的正确的代码。
我更新了示例,以更好地测试和说明我的观点和问题。如代码所示,这显示了要工作的东西。
我真正想要的是,是否仍有可能以某种我还没有想到的其他方式实现我的目标。
发布于 2016-09-30 04:20:11
使用$mdPanel
而不是$mdDialog
,我能够达到预期的效果;我用分叉的演示来反映变化--以下是重点:
var dialog = {};
function showDialogs() {
showDialog("one");
showDialog("two");
}
function showDialog(id) {
var config = {...};
$mdPanel.open(config)
.then(function(panelRef) {
dialog[id] = panelRef;
});
}
function closeDialogs() {
var id;
for(id in dialog) {
closeDialogSpecific(id, "Closed all for a reason");
}
}
function closeDialogSpecific(id, reason) {
var message = reason || "finished: " + id;
if(!dialog.hasOwnProperty(id) || !angular.isObject(dialog[id])) {
return;
}
if(dialog[id] && dialog[id].close) {
dialog[id].close()
.then(function() {
vm.feedback = message;
});
dialog[id] = undefined;
}
}
发布于 2016-09-02 04:29:20
我建议两个或更多的对话在同一时间是不理想的,可能不是推荐的谷歌材料设计。
引用文档
谨慎地使用对话框,因为它们会被打断。
你说:
当AJAX请求完成获取数据时,我希望我的加载旋转器关闭,但不希望任何可能是抓取结果的错误对话框关闭。
我在这里的解决方案是有一个对话框,它最初显示的是旋转器。一旦请求完成,就用任何消息替换旋转器。
https://stackoverflow.com/questions/39292006
复制相似问题