【问题标题】:Don't destroy an Angular Bootstrap modal on close不要在关闭时破坏 Angular Bootstrap 模态
【发布时间】:2014-07-09 12:36:15
【问题描述】:

我正在使用 Angular Bootstrap 显示一个模态(here 提供的模态),它运行良好。然而,这个 Angular 扩展的默认行为是,当模态框关闭然后再次打开时,它会被重建(并且将创建其控制器的新实例)。

由于我在 Modal 内部进行了一些非常高级的操作,因此我希望在模态框关闭时将其隐藏,以便保持其状态。我搜索了一下,但不幸的是找不到简单有效的答案。

只是隐藏它是一个选项,但是当模态框关闭时必须发生这种情况,当它因为点击背景而关闭时也是如此。而且我想要与以正常方式打开模态时相同的动画。

【问题讨论】:

  • 如何关闭模型弹窗,可以在这里粘贴代码吗??
  • 我用 $modal.open() 函数打开了模态,它被例如关闭。点击背景。我不必为此提供任何代码,每次用户单击打开对话框的链接时,我只需执行 $modal.open() 即可。

标签: javascript angularjs twitter-bootstrap


【解决方案1】:

为什么不将模态状态抽象到它自己的服务中呢?这样,无论何时创建模态控制器,它都会使用该服务在初始化时设置视图状态。

例如。创建服务

.factory('ModalStateService', function(){
    var state = {
        someValue: 'something'
    };

    return {
        getState: function() { return state; }
    };
});

然后在你的控制器中:

.controller('ModalCtrl', function($scope, ModalStateService){
    $scope.viewState = ModalStateService.getState();
});

然后在你的模态内容视图中例如:

<span>{{viewState.someValue}}</span>

如果您随后在模态框内设置someValue,例如通过输入,则服务状态将被更新。然后,当您创建和销毁您的模态框时,该状态将持续存在。

【讨论】:

  • +1 的想法,我已经想到了这样的东西,只是我只是将状态存储在父范围中。这个想法比存储在父范围中更好。不过,这种方法对我来说的一个问题是,我还必须存储诸如用户在模态中的哪个子页面、未提交表单的值等内容,而模态的显示/隐藏操作将允许我不用理这些事。
  • 显示/隐藏如果对你有用的话就很好,但听起来你正在做一些非常复杂的事情,可能根本不应该在模式中。无论哪种方式,最好将您的状态与您的视图分离。
  • 我正在做一些相当复杂的事情,但我不知道为什么这意味着它不应该在模态中。尽管它很复杂,但用户应该能够在他/她关闭模式时简单地回到他/她正在做的事情。无论如何,我接受了你的答案作为对我最好的答案,我现在就记住这个状态。再次感谢您的建议!
【解决方案2】:

您可能已经知道,当关联视图添加到 DOM 时,Angular 会初始化一个控制器。所以插件作者可能已经决定添加和删除视图元素,这样他就不必担心每次用户打开和关闭模式时清除“范围”。

例如,我们在modal中有一个登录框,如果没有清除范围,即使下次显示它也会保留填写的详细信息。

解决您的问题的一个简单方法是将原始模式包装在自定义指令中,然后对其进行渲染。只需更改自定义模式的显示属性即可显示和隐藏模式;)

【讨论】:

  • 感谢您的建议,但您能否详细说明您描述的黑客行为?将模态放入指令中如何做我想要的?
猜你喜欢
  • 2021-02-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-09
  • 2022-12-04
  • 2018-06-05
  • 1970-01-01
  • 2016-02-24
相关资源
最近更新 更多