当前位置: 首页 > 面试题库 >

AngularJS:打开一个新的浏览器窗口,但仍保留作用域和控制器以及服务

金令
2023-03-14
问题内容

我正在编写一个angularJS应用。在这个特定的控制器中,我通过该$window.open服务打开一个新的浏览器窗口。但是在新窗口中,所有$scope变量都丢失了。

我尝试使用,window.parent但这不起作用。实际上,在新的浏览器窗口中,所有应用程序服务,控制器或作用域都根本无效,这是真的吗?有没有办法打开新的浏览器窗口,但仍然使新窗口与旧窗口属于同一个角度应用程序?我需要访问一些angularJS服务以及打开该新窗口的控制器范围。这有可能吗?


问题答案:

没有使所有新窗口都属于同一个angular.js应用程序的方法,因为angular应用程序通常与通过ng-
app指令对其进行初始化的文档,窗口和窗口事件相关联或致电angular.bootstrap。

但是,您可以为弹出窗口创建新的角度模块和应用程序。通过包含适当的javascript文件,您可以使用原始应用程序中的相同基本服务和控制器。

假设弹出窗口需要原始应用程序中的数据,则可以使用window.open()方法返回的window对象传递该数据。例如,在第一个角度应用程序中,如下所示打开弹出窗口:

angular.module('originalModule').service('popupService', function(someOtherDataService) {

  var popupWindow = window.open('popupWindow.html');
  popupWindow.mySharedData = someOtherDataService.importantData;

});

辅助“弹出式”角度应用程序一旦初始化,便可以通过读取window.mySharedData来引用共享数据。

您还可以在每个窗口中创建可以从另一个窗口调用的函数。弹出窗口可以使用window.opener属性来回调到原始窗口。(window.parent指框架的父窗口,需要window.opener)

[同意,如果您研究了角度源代码,我敢肯定,您会找到在两个窗口中使用相同角度应用的巧妙方法。今晚我无法实现这样的尝试。]



 类似资料:
  • 问题内容: 我是angular js的新手,我希望在按下按钮后在浏览器的新窗口中打开PDF文档。 我在前端发出GET请求,在后端有一个Java Rest服务,该服务响应GET并生成PDF。我希望在浏览器中打开此PDF。 如果无法以这种方式打开PDF,那么至少要使用AngularJs打开任何PDF,我该怎么做? 这就是后端在其余服务中生成响应的内容。 问题答案: 如果您有这样的事情: 而是这样做:

  • 具有第三方库回调函数的服务: 还有一个控制器 html页面 m3rdPartLib。on()是一个第三方库回调函数,我正在服务中使用它。我想在它更新时在ui中显示它。在回调时,值会发生更改,但不会反映在ui上。 阅读一些文档并找到$rootScope$可以调用apply,但我在服务中没有$scope/$rootScope的引用。

  • 但是,它会完全擦除以前绘制的对象。 我想要删除之前的最后一行和一个新的线来连接原点和新的最后一点。

  • 我不清楚为什么我在以下示例中打开了3个chrome浏览器。我有一个@Before(cucumber版本)注释,只需在方案运行之前设置一个chrome webdriver实例。据我所知,它应该打开一个浏览器,运行场景(步骤定义),然后使用@Aftercucumber钩关闭。在第三个也是最后一个窗口实际执行步骤之前,打开2个窗口: 步骤定义: 当我单步执行Intellij中的代码时,将调用以下方法:

  • 我不知道为什么我为下面的示例打开了2个火狐浏览器。有人能告诉我下面的代码有什么问题吗?我是cucumber新手,我正在尝试使用页面对象模型开发cucumberpoc。 特征文件: 步骤定义文件: 步骤定义文件的实际实现:(首页.java) BasePage.java CustomerDetails.java 打开2个火狐浏览器:首先它打开一个空白浏览器。后来它打开另一个浏览器,并在此浏览器中打开应

  • 语言-JAVA IDE-Eclipse工具-Selenium Web驱动程序