2015-09-06 71 views
0

我有一个web应用程序,需要打开一个新的浏览器窗口并将角度应用程序加载到该应用程序中。我不觉得这有什么问题由东如下:在新的浏览器窗口中启动新的Angular应用程序

var windowObjectReference = window.open(strUrl, strWindowName, [strWindowFeatures]); 

得到一个参考到一个新的窗口后,我可以调用它的功能和发送数据给它。发送数据是关键功能。我有点模糊,但是Angular应用程序究竟会获取这些数据。我可以使用windowObjectReference调用$ rootScope函数吗? 有什么建议吗?

感谢

+0

需要详细说明你想做什么 – charlietfl

回答

0

我会用你正在使用你的Web应用程序来传递数据,而不是任何后端API。这样,您的角度应用程序应设置为使用内置的http库来从那里请求数据。这样你就可以有更多的角度构造,可以帮助你。在您的角度应用代码的一个例子是这样的:

var onGetResponse = function(data) { 
    $scope.appData = data; 
} 
var onGetError = function(reason) { 
    $scope.responseError = "Could not get the app data."; 
    alert($scope.responseError); 
} 

$http.get('/appData').success(onGetResponse).error(onGetError); 

底部的声明实际上使调用后端API和当它得到一个成功的响应,它会调用顶部。然后,您的角度应用可以使用{{appData}}访问信息。

+0

不,我至少现在不能使用bqckend。它只能是客户端解决方案。 – Mark

+0

噢,对不起。也许如果你更多地描述了自己的局限性,我可以想出更合适的解决方案。现在唯一的其他建议是在Web应用程序本身中添加对angular的引用。然后,您可以使用您正在使用的任何服务器端语言将数据分配给某个$ scope对象。这样,你可以打开新的URL,角度部分已经知道你的数据。 – Fake

+0

当然,我需要从当前应用程序打开一个新的浏览器窗口,并加载Angular应用程序。正如我所说,这部分很容易。我还需要将一些用户特定的数据从第一个应用程序转移到新的应用程序中。 – Mark

0

有很多种方法,通过该窗口可通过一个窗口交谈,来自同一个域,它打开了:

  • Shared WorkersService Workers可以从同一个域中的所有窗口进行通讯。
  • 随着window.postMessage您可以发送从 打开的窗口和iFrames接收消息。
  • Local storage可用于来自同一个域的窗口 之间的通信,使用在关键内容更改时触发的storage事件。
  • 旧方法使用window.opener。打开的窗口可以 引用它的父级并请求它所需的信息。父母只需将窗口上的对象存储在需要的方法 中。
  • 您也可以使用散列#部分通过URL发送信息。

您可以将大多数这些方法封装在打开的窗口和开启器的服务中。顺便说一句 - 不要忘记$应用任何这种方法。

相关问题