javascript - 打开新窗口,在该窗口中运行 $scope 函数,更好的方法

标签 javascript jquery angularjs

所以,我有两个单页应用程序,这两个应用程序都包含一个项目列表,在 Application A 中我们有 List A,在 Application B 我们有 列表 B

List A 中的项目可以是 List B 中项目的父级,一对多关系。

如果用户单击 App A 中的项目,他将获得查看相关项目 的选项,这将打开 App B一个单独的窗口(新选项卡),并过滤 List B 以仅显示与 App A 中单击的项目相关的项目。

这意味着我必须打开一个新窗口,并在该窗口准备就绪时运行一个函数,并传递所点击项目的 ID 以过滤我的列表。

$scope.openNewWindow = function(id){

    var popup = window.open('newPageUrl');

      // check to see when opened page is ready
    var readyStateCheckInterval = setInterval(function() {
        if (popup.document.readyState === "complete") {
            clearInterval(readyStateCheckInterval);
            // function on App B
            popup.functionToRunWhenReady(id);
        }
    }, 50);
};

functionToRunWhenReady() 函数是一个 javascript 函数,必须运行实际函数来过滤我的列表,这是一个 $scope 函数,原因是我无法从其他应用程序访问 $scope 函数

function functionToRunWhenReady(id) {
    angular.element(document).ready(function () {

        var scope = angular.element($('#myAppDiv')).scope();

        scope.$apply(function() {
             // scope function to filter the list
            scope.setFilter(id);
        });
    });
}

正如您在这里看到的,我检查 document 是否准备就绪,通过 var scope = angular.element($('#myAppDiv' )).scope(); 然后运行我的 setFilter(id) 函数

这行得通,但我不敢相信这是解决此问题的最佳方法。

tl;dr 如何打开一个新窗口,然后在新应用程序上运行 $scope 函数,以一种不错的做法?

编辑:我看到有人建议使用 $routeparams,但我真的不知道它是如何工作的,或者它是否适用于我的应用程序(它们都是 < em>单页应用),所以对此的进一步解释会很棒

最佳答案

将 ID 作为 GET 参数发送到应用程序 B。然后您可以使用 $routeParams 直接在 Controller 中访问它而不会造成任何延迟。

关于javascript - 打开新窗口,在该窗口中运行 $scope 函数,更好的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38239835/

相关文章:

javascript - SVG 在动画时和完成动画后不显示中心

jquery - 使用 ajax 发送 Html 错误的 Css 结构

javascript - 如何组织多个需要 jQuery 和 jQuery 扩展的 portlet?

jquery - 是否应该使用网络服务来创建整个网站?

AngularJS 如何提醒对象值

javascript - node.js 样板 + 最佳实践

javascript - QML - 将 JS 函数的代码作为字符串获取

angularjs - 如何衡量 Angular 应用程序的性能?

javascript - 我可以访问组件状态中的 redux props/应用程序状态吗

jquery - 使用哪个版本的 jQuery/jQuery UI?