将数据从父窗口传递到子窗口

时间:2016-06-30 17:13:23

标签: javascript angularjs

你好我对前端开发很新,我试图将一些数据从我的父窗口传递到我的子窗口,但它只是作为[object] [object]

JS

 $scope.openLargeGraph = function() {
   var childWindow = window.open('graphs.html', "", "width=950,height=850");
   var testData = $scope.data;
   childWindow.data = testData;

   childWindow.document.write(childWindow.data);
   console.log(testData)

   console.log(childWindow.data);

   // childWindowForGraph.moveTo(300, 50);
 };

3 个答案:

答案 0 :(得分:3)

您可以在打开窗口之前将数据存储在window.localStorage中。然后在加载新窗口时读回来。

参见在线演示 - https://plnkr.co/edit/nEjjzLC4pVvg1nOsXlgA?p=preview

index.html

app.controller('MainCtrl', function($scope) {
  $scope.data = {
    layout: 'spring',
    nodes: [{name:'Node 1', x: 2, y: 4 },{name:'Node 2', x: 2, y: 4 }] 
  };

  $scope.openLargeGraph = function() {
    // Save data on local storage
    window.localStorage['graph:data'] = angular.toJson($scope.data);
    window.open('graphs.html', "", "width=950,height=850");
  };

});

<强> graphs.html

app.controller('MainCtrl', function($scope) {
  $scope.data = angular.fromJson(window.localStorage['graph:data']);
});

https://plnkr.co/edit/nEjjzLC4pVvg1nOsXlgA?p=preview

请注意,这不是最佳做法,如果可能,请使用相同的页面并异步更改视图(google angular SPA application

我猜你想要隔离你的应用程序的某些部分,将图形渲染到不同的窗口,希望这可以帮助你实现你想要的东西

答案 1 :(得分:0)

如果你这样访问它只会显示你作为对象格式,请在你的控制台中尝试这样

 console.log(childWindow.data[0]);
 console.log(childWindow.data[1]);

然后你可以看到第一个控制台的graphs.html和宽度= 950,第二个高度= 850

答案 2 :(得分:0)

您可以使用window.postMessage在Windows之间传输数据:

//graphs.html
window.addEventListener("message", function(event){
    document.write(event.data);
}, false);

然后在graphs.html中添加消息事件监听器:

db.users.find({"user":{"login":"tester"}});