我正在编写一个 angularJS 应用程序。在这个特定的控制器中,我通过以下方式打开一个新的浏览器窗口$window.open
服务。但在新窗口中,所有$scope
变量丢失。
我尝试使用window.parent
但这行不通。事实上,在新的浏览器窗口中,所有应用程序服务、控制器或范围根本不起作用,这是真的吗?有没有办法打开一个新的浏览器窗口,但仍然使新窗口属于旧窗口中的同一个角度应用程序?我需要访问一些 angularJS 服务以及打开该新窗口的控制器的范围。这有可能吗?
没有[直接]方法使新窗口属于同一个 angular.js 应用程序,因为 Angular 应用程序通常与通过 ng-app 指令初始化的窗口的文档、窗口和事件相关联或者通过调用 angular.bootstrap。
但是,您可以为弹出窗口创建新的角度模块和应用程序。您可以通过包含适当的 javascript 文件来使用原始应用程序中相同的基本服务和控制器。
假设您的弹出窗口需要来自原始应用程序的数据,您可以使用从 window.open() 方法返回的窗口对象来传递该数据。例如,在您的第一个角度应用程序中,打开弹出窗口,如下所示:
angular.module('originalModule').service('popupService', function(someOtherDataService) {
var popupWindow = window.open('popupWindow.html');
popupWindow.mySharedData = someOtherDataService.importantData;
});
一旦您的辅助“弹出”角度应用程序初始化,它就可以通过读取 window.mySharedData 来引用共享数据。
您还可以在每个窗口中创建可以从其他窗口调用的函数。弹出窗口可以使用 window.opener 属性回调到原始窗口。 (window.parent指frames的父窗口,你要window.opener)
[同意,我确信如果您研究了 Angular 源代码,您可以找到一些巧妙的方法来为两个窗口使用相同的 Angular 应用程序。这样的尝试超出了我今晚的野心。]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)