我有一个单击按钮的页面,然后会打开一个弹出页面。我需要一种方法将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对象(最好不使用),并在父对象和弹出窗口之间传递数据。
答案 0 :(得分:1)
我最终做了以下事情:
在我的父页面控制器中,我做了:
function ParentCtrl($scope, window){
window.parentScope = $scope;
window.open(childPageURL, params);
}
在我的孩子控制器中:
function ChildCtrl($scope, window){
var sharedData = window.opener.parentScope.someData;
//Some code which changes sharedData
window.opener.parentScope.someData = sharedData;
window.opener.parentScope.$apply();
}
这似乎对我有用。我唯一喜欢的是抽象出服务中的逻辑,两个控制器都可以与之通信并共享数据。