AngularJS 模式单例在服务中未更新视图
AngularJS Modal Singleton in Service Not Updating View
>我正在尝试创建一个单例"加载对话框"服务,但是在关闭现有对话框时,视图中没有更新。
模态对话服务:
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 个加载对话框。这不会发生。
例如,在控制器中,执行以下代码:
loadingDialog.show('dialog 1');
loadingDialog.show('dialog 2');
loadingDialog.hide();
现在我期望的是创建第一个对话框,然后替换为第二个对话框。调用隐藏方法时,不会打开任何加载对话框。
现在实际发生的情况是,这两个对话框是相互叠加创建的,当调用隐藏方法时,对话框 2 关闭,但对话框 1 仍然打开。
仅当从控制器显式调用 loadingDialog
服务的 hide
方法时,它才似乎实际上对视图进行了更改。如果从服务调用,则不会发生任何操作。
在我看来,在服务本身中调用 hide
方法不会更新视图,但我不知道如何解决这个问题。
看起来你正在做的事情很好。问题在于通过引导打开对话框时发生的延迟。我使用超时顺序进行动画,然后在动画制作后添加要跟踪的对话框。在您的情况下,您尝试过早关闭它,并且在modalstack关闭方法中,它会查找打开的窗口,但它还没有。它在工厂$$stackedmap
内部保留一堆打开的窗口,并且尚未将窗口添加到堆栈中。
从关闭方法
$modalStack.close = function (modalInstance, result) {
var modalWindow = openedWindows.get(modalInstance);
if (modalWindow) {
modalWindow.value.deferred.resolve(result);
removeModalWindow(modalInstance);
}
};
为了解决这个问题,您可以使用超时(接近0.15s的动画间隔)来包装modalinstance.close。
this.destroy = function (modalInstance) {
$timeout(function(){
modalInstance.close();
},150);
};
演示
相关文章:
- $routeParams在传递到新视图时未定义&控制器
- ajax.beginform() 不更新部分视图 MVC
- 角度指令没有更新模型视图
- 如何在渲染新视图之前关闭所有事件
- 从Backbone中的另一个视图调用新视图
- Angular数组更改时更新HTML视图
- 更新淘汰视图模型属性时激发更改事件
- Angular2 在创建 ngSwitch 新视图后调用自定义函数
- Knockout.js-更新父视图模型中的数组,在第二个视图模型中使用值
- 比较两个数组,并通过使用 javascript 保留现有对象来更新新值
- 单击按钮时更新角度视图模型
- 当现有 Google 标记移动到另一个位置时,如何更新新的纬度和经度
- 如何在 DIV 中更新新图像
- 使用 AJAX 更新的模型更新 AngularJS 视图
- 主干新视图反映旧模型数据
- 如何在单击按钮时动态更新部分视图
- 更新主干视图
- 挖空 - 添加了可观察的不更新新对象
- 使用 ajax 从 php 文件中获取随机数不会更新新结果
- 创建新视图时调用呈现函数