在新的浏览器窗口中启动新的Angular应用程序

时间:2015-09-06 20:44:08

标签: javascript angularjs

我有一个Web应用程序,我需要从中打开一个新的浏览器窗口并将角度应用程序加载到其中。我没有看到以下任何问题:

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

在获得对新窗口的引用后,我可以调用它的函数并向其发送数据。发送数据是关键功能。我有点模糊但是Angular应用程序将如何获取此数据。我可以使用windowObjectReference调用$ rootScope函数吗? 有什么想法吗?

由于

2 个答案:

答案 0 :(得分: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,当它成功响应时,它将调用top。然后,您的角度应用可以使用{{appData}}访问信息。

答案 1 :(得分:0)

窗口可以通过多种方法与窗口进行通信,从同一个域开始,它打开了:

  • Shared WorkersService Workers可以与来自同一域的所有窗口进行通信。
  • 使用window.postMessage,您可以发送来自的接收消息 打开了窗户和iFrame。
  • Local storage可用于窗口之间的通信 来自同一个域,使用在更改密钥内容时触发的int FScale = 64; int FShift = 6; GArray<uint32> Glyphs; for (OsChar *s = Str; *s; s++) { FT_UInt index = FT_Get_Char_Index(Fnt, *s); if (index) Glyphs.Add(index); } // Measure the string... GdcPt2 Sz; int FontHt = Font->GetHeight(); int AscentF = (int) (Font->Ascent() * FScale); int LoadMode = FT_LOAD_FORCE_AUTOHINT; for (unsigned i=0; i<Glyphs.Length(); i++) { error = FT_Load_Glyph(Fnt, Glyphs[i], LoadMode); if (error == 0) { int PyF = AscentF - Fnt->glyph->metrics.horiBearingY; Sz.x += Fnt->glyph->metrics.horiAdvance; Sz.y = max(Sz.y, PyF + Fnt->glyph->metrics.height); } } // Create the memory context to draw into x = ((Sz.x + FScale - 1) >> FShift) + 1; y = FontHt; if (Img.Reset(new GMemDC(x, y, CsIndex8))) { // Clear the context to black Img->Colour(0); Img->Rectangle(); int CurX = 0; int FBaseline = Fnt->size->metrics.ascender; for (unsigned i=0; i<Glyphs.Length(); i++) { error = FT_Load_Glyph(Fnt, Glyphs[i], LoadMode); if (error == 0) { error = FT_Render_Glyph(Fnt->glyph, FT_RENDER_MODE_NORMAL); if (error == 0) { FT_Bitmap &bmp = Fnt->glyph->bitmap; if (bmp.buffer) { int Px = (CurX + (FScale >> 1)) >> FShift; int PyF = AscentF - Fnt->glyph->metrics.horiBearingY; int Py = PyF >> FShift; // copy bitmap into my image buffer at 'Px' x pos } if (i < Glyphs.Length() - 1) { FT_Vector kerning; FT_Get_Kerning(Fnt, Glyphs[i], Glyphs[i+1], FT_KERNING_DEFAULT, &kerning); CurX += Fnt->glyph->metrics.horiAdvance + kerning.x; } else { CurX += Fnt->glyph->metrics.horiAdvance; } } } } } 事件。
  • 旧方法正在使用window.opener。打开的窗口可以 引用它的父母并请求它所需的信息。该 父母只需要在窗口上存储一个需要的对象 方法。
  • 您还可以使用hash#part。
  • 通过网址发送信息

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