【问题标题】:Open Same AngularJS application in new window and call function in parent window在新窗口中打开相同的 AngularJS 应用程序并在父窗口中调用函数
【发布时间】:2015-10-27 21:37:27
【问题描述】:

我一直在研究 Angular 应用程序。我有一个要求,当我向用户显示可用任务列表并单击特定任务时,打开一个具有相同 AngularJS 应用程序代码库的新窗口,这将允许用户对任务进行更改。新窗口中的应用程序将是独立的,用户可以执行一些操作。一旦用户关闭窗口,我需要刷新父应用程序(父窗口)中的任务列表。

我正在向子窗口传递一些数据,这些数据由一些属性和一个函数组成,

var appData = {
                action: "edit",
                id: taskId,
                refreshTasks: refreshTasks
            };

刷新任务是我的一个控制器中的一种方法

我正在通过以下方式将数据传递给子窗口,

var windowHandle = $window.open("http://www.example.com"); 
if(angular.isDefined(windowHandle)) {
     windowHandle.appData = (dataObj == null ? {} : dataObj);
     windowHandle.appData.isChildWindow = true;
}

现在我们使用子窗口访问传递的数据,

$window.appData

现在当子窗口关闭时,我正在以下列方式调用我传递的函数,

$window.appData.refreshTasks()

以上似乎在 Chrome 和 Mozilla 中有效,但在 IE (8,9,10,11) 中无效

所以我真的很想知道如何将函数从一个窗口中的一个 Angular 应用程序调用到另一个窗口中的另一个 Angular 应用程序。

您能告诉我正确的方法是什么吗?

【问题讨论】:

    标签: javascript angularjs


    【解决方案1】:

    您可以使用window.opener 访问appData

    window.opener.appData
    window.opener.appData.refreshTasks()
    

    【讨论】:

    • 感谢您的回答。但这仍然行不通。是不是我必须发送如下windowHanlde.opener.appData 的数据?
    • 如果appData是父窗口中的全局变量,上述代码将起作用
    • 它不是全局变量。这就是我的问题所在,如何从子窗口调用我的一个控制器中的函数。
    • 所以 appData 是在控制器内部定义的?
    • No AppData 我在打开窗口后形成并将其分配给子窗口的引用windowHandle.appData 你可以在我上面解释的代码中看到。但是,我尝试在父窗口中创建一个全局函数,并尝试从子窗口中调用它,例如window.opener.myParentWindowFunc(),但这也不起作用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多