2015-09-06 69 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發送信息。

您可以將大多數這些方法封裝在打開的窗口和開啓器的服務中。順便說一句 - 不要忘記$應用任何這種方法。

相關問題