angularjs - 如何在弹出窗口中渲染 Angular 指令,并允许其与主窗口进行通信?

标签 angularjs angularjs-directive

我的应用程序的用户希望能够将某些应用程序组件从 SPA 中分离出来,并将它们移动到第二台显示器上,同时保留其功能。

我不想在弹出窗口中加载整个 SPA,只是为了显示这一个 View 。我发现我可以将模板附加到弹出窗口的主体中,并使用主窗口中的范围对其进行 $compile 。这在大多数情况下是有效的,但任何使用“require”语法的指令最终都会失败,因为无论 Angular 在哪里寻找所需的指令,它都找不到它。

是否有更好的方法来实现我想要实现的目标?

或者我可以尝试解决“找不到指令 Y 所需的 Controller X”问题吗?

function createWindowForPoppedOutPane(pane) {
    var features = 'menubar=no';
    if (pane.top) features += ',top=' + pane.top;
    if (pane.left) features += ',left=' + pane.left;
    if (pane.width) features += ',width=' + pane.width;
    if (pane.top) features += ',height=' + pane.height;

    pane.window = $window.open('', '_blank', features);
    copyStyleSheetsToWindow(pane.window);
    var paneScope  = scope.$new(false);
    paneScope.pane = pane;

    var paneTemplate = $($templateCache.get('pop-out-pane-template'));
    paneTemplate.append($templateCache.get(pane.template));

    scope.$evalAsync(function () {
        pane.window.document.title = pane.title;
        angular.element(pane.window.document.body).append(paneTemplate);
        $compile(paneTemplate)(paneScope);
        startPoppedOutPaneWatcher();
    });
}

最佳答案

处理这种情况的正确方法是在新窗口中加载应用程序。这与右键单击在新窗口中打开没有什么不同。如果您为 JS 和 CSS 文件发送适当的缓存 header ,则用户无需下载这些文件。

尝试构建第二个可以使用某些组件的子站点将是维护的噩梦。

另一种方法是创建第二个顶级模块,仅引入您需要的组件,但这同样需要您进行大量的额外工作,并且您的用户需要下载其他文件。

关于angularjs - 如何在弹出窗口中渲染 Angular 指令,并允许其与主窗口进行通信?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39900361/

相关文章:

javascript - 如何在 md-select inside 指令中绑定(bind)到多个

javascript - Angular 1.2.24 : Testing directive throws undefined in scope. $摘要();

javascript - Angular 如何知道应该重新应用绑定(bind)以使用更新的数据刷新 UI 元素?

javascript - 在 AngularJS 中删除一个对象

javascript - AngularJS - ngClick 上未调用 Controller 方法 - 无错误

javascript - 获取请求 AngularJs 后滚动到页面底部

javascript - Angularjs 指令绑定(bind)到内部内容不起作用

angularjs - 显示 AngularJS TreeView 折叠

Angular 7 : Can't bind to 'directive' since it isn't a known property of 'element'

python - 使用 AngularJS 显示来自 API 的图像( flask 应用程序)