【问题标题】:How to isolate javascript and css of a popup from the parent page?如何将弹出窗口的javascript和css与父页面隔离?
【发布时间】:2017-02-02 15:45:21
【问题描述】:

问题:当我打开一个包含 javascript 和 css 的模态弹出页面时,两者都反映在父页面上,弄得一团糟。我使用 angularjs 并像这样打开模式:

var modalInstance = $modal.open({
animation: true,
templateUrl: 'myPopup.html',
controller: 'MyController',
scope: $scope   

});

即使当我关闭弹出窗口时,父页面也会继续混乱。如何以不反映在父页面上的方式隔离弹出 css 和 javascript?有没有简单的方法来做到这一点?

ps。我尝试创建一个新范围并将其作为参数传递给模式,期望父页面的 DOM 不会被修改,但没有成功。

编辑:组件的链接是this

【问题讨论】:

  • 如果您添加 css 并且在关闭模式后不删除它,您应该在您的 css 中添加父选择器如 .mymodal ... 或考虑使用 iframe?

标签: javascript css angularjs modal-dialog angular-ui-bootstrap


【解决方案1】:

您能否修改 CSS,使其不包含适用于模板之外元素的规则?如果您可以通过为其容器提供 ID 来唯一标识您的模板,则可以修改规则,使其仅适用于该容器中的元素。至于 javascript,您也可以这样做,尽管它实际上取决于代码本身。您能否提供有关 CSS 和您正在使用的脚本的更多信息?

编辑:按照 Alex 的建议,可能的最佳方法是在模式中打开一个 iframe。为此,您在模式中呈现的模板 myPopup.html 将只包含一个指向 URL 的 iframe,并在通过该 URL 可用的页面中粘贴您的组件。至于与组件的通信,可以在 URL 中传递参数,然后按照herehere 的说明进行读取。

如果您需要相反方向的通信,也就是说,如果用户与模态的交互应该以某种方式影响打开模态的页面,这将变得很棘手,因为您可能需要涉及服务器。

【讨论】:

  • 如果可能的话,我宁愿一个更简单的解决方案,而不是构建我所有的 css。关于 javascript,我正在使用一个组件,该组件包括它的 css 和 javascript,这弄乱了我的父页面。如果我删除它们,它就不起作用...
  • 组件是第三方插件还是什么?你能提供它的链接吗?
  • 我认为最简单的方法是遵循 Alex 的建议:使用 iframe。如果您不想修改组件 CSS 并且需要完全隔离,这是最干净的方法(尽管我个人讨厌 iframe)。
  • 但我应该如何在 iframe 中打开此模式并将范围参数传递给它?
  • 模态框将包含 iframe。至于它需要的参数,它们应该在 iframe 的 URL 中。然后,在呈现模态内容的完全独立页面中,您将从 URL 中读取这些参数并相应地初始化您的组件。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-09
  • 1970-01-01
  • 2014-12-23
  • 2012-02-07
  • 1970-01-01
  • 2011-10-31
相关资源
最近更新 更多