在angularjs中在父页面和弹出页面之间传递数据的最佳方法

时间:2014-04-11 16:32:07

标签: javascript angularjs popup angularjs-service

我有一个单击按钮的页面,然后会打开一个弹出页面。我需要一种方法将json数据从我的父页面传递到弹出窗口。这两个是单独的角度应用。

然后根据用户的操作修改数据,并将其提交回父页面。我查看了AngularJS: open a new browser window, yet still retain scope and controller, and services,它在打开弹出窗口时将数据附加到父页面控制器中的$ window对象,将数据分配给弹出窗口的范围,然后将弹出窗口中的修改后的数据分配给弹出窗口控制器中的$ window.opener对象,因此它在父级中可用。

我想知道是否通过使用服务和在两个页面/应用程序之间传递数据来实现这一目标。

我看过http://answer.techwikihow.com/27863/share-single-service-between-multiple-angular-js-apps.html,它展示了如何在两个ng-apps之间传递数据,但我想知道是否有比这更简洁明了的解决方案。我不想在我的弹出窗口控制器中引用$ window对象来访问共享数据,然后设置opener属性。我希望能够编写一个共享服务,该服务可能/不可以使用$ window对象(最好不使用),并在父对象和弹出窗口之间传递数据。

1 个答案:

答案 0 :(得分:1)

我最终做了以下事情:

  1. 在我的父页面控制器中,我做了:

    function ParentCtrl($scope, window){
        window.parentScope = $scope;
        window.open(childPageURL, params);
    }
    
  2. 在我的孩子控制器中:

    function ChildCtrl($scope, window){
        var sharedData = window.opener.parentScope.someData;
    
        //Some code which changes sharedData
    
        window.opener.parentScope.someData = sharedData;
        window.opener.parentScope.$apply();
    }
    
  3. 这似乎对我有用。我唯一喜欢的是抽象出服务中的逻辑,两个控制器都可以与之通信并共享数据。