gpt4 book ai didi

javascript - 服务中的 AngularJS 模态单例不更新 View

转载 作者:行者123 更新时间:2023-11-28 00:38:04 33 4
gpt4 key购买 nike

我正在尝试创建一个单例“LoadingDialog”服务,但是当关闭现有对话框时, View 中没有更新。

ModalDialog 服务:

angular.module('app')
.service('modalDialog', function ($modal) {
this.create = function (templateUrl, data, size) {
return $modal.open({
templateUrl: templateUrl,
controller: 'ModalDialogCtrl',
size: size,
backdrop: 'static',
keyboard: false,
resolve: {
data: function () {
return data;
}
}
});
};

this.destroy = function (modalInstance) {
modalInstance.close();
};
});

加载对话框服务:

angular.module('app')
.service('loadingDialog', function (modalDialog) {
this.instance = null;

this.show = function (text) {
if (this.instance !== null) {
this.hide();
}
this.instance = modalDialog.create('views/loading-dialog.html', {text: text});
};

this.hide = function () {
modalDialog.destroy(this.instance);
};
});

您可以看到我正在存储实例变量,以确保一次仅显示 1 个加载对话框。这不会发生。

例如,在Controller中,执行以下代码:

loadingDialog.show('dialog 1');
loadingDialog.show('dialog 2');
loadingDialog.hide();

现在我期望的是创建第一个对话框,然后由第二个对话框替换。调用 hide 方法时,不会打开任何加载对话框。

现在实际发生的情况是,这 2 个对话框是在彼此之上创建的,当调用 hide 方法时,对话框 2 被关闭,但对话框 1 仍然打开。

只有当从 Controller 显式调用 loadingDialog 服务的 hide 方法时,它看起来才真正对 View 进行更改。如果从服务调用,则不会发生任何事情。

在我看来,在服务本身中调用 hide 方法并没有更新 View ,但我不知道如何解决这个问题。

最佳答案

看来你正在做的事情没问题。问题是通过 Bootstrap 打开对话框时发生的延迟。我使用超时来使动画发生,然后在动画制作后添加要跟踪的对话框。在您的情况下,您试图过早关闭它,并且在 modalstack close 方法中,它会查找打开的窗口,但它还不存在。它在工厂内部保存一堆打开的窗口 $$stackedmap并且它还没有将窗口添加到堆栈中。

来自 close method

 $modalStack.close = function (modalInstance, result) {
var modalWindow = openedWindows.get(modalInstance);
if (modalWindow) {
modalWindow.value.deferred.resolve(result);
removeModalWindow(modalInstance);
}
};

为了解决此问题,您可以使用超时(时间间隔接近 0.15 秒的动画间隔)来包装 modalinstance.close。

this.destroy = function (modalInstance) {
$timeout(function(){
modalInstance.close();
},150);
};

<强> Demo

关于javascript - 服务中的 AngularJS 模态单例不更新 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28264660/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com