2016-06-30 33 views
1

您好,我对前端开发非常陌生,我试图将一些数据从我的父窗口传递到我的子窗口,但它只是以[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); 
}; 
+0

打开单页应用程序(SPA)中的子窗口最多是不常见的。考虑使用类似于ui bootstrap模式的模式(https://angular-ui.github.io/bootstrap/),因为它与AngularJS的mvc模式一致。 – jbrown

+0

你可以把数据放在'localStorage'然后在孩子读取它 –

回答

2

在打开窗口之前,您可以将数据存储在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


请注意,它不认为是最佳做法,如果有可能使用相同的页面并更改视图异步(谷歌角SPA应用

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

+0

如果两个html页面共享相同的控制器....我试图完成的是打开一个儿童窗口,其中有更大的图表...为了做到这一点,我有一个图表库(这是一个指令),并支持需要的数据通过 – user2402107

+0

即使您使用相同的控制器,上述技术也能正常工作。加载开始,保存之前打开 –

+0

https://plnkr.co/edit/bNQjurR0wojqdjEKYjbD?p=preview – user2402107

0

如果u访问一样,它会显示ü仅对象格式,尝试像这样在控制台

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

然后ü可以看到图s.html为第一控制台和宽度= 950,高度= 850为第二

+0

undefined ...我不认为我的var被传递给子窗口 – user2402107

+0

console.log($ scope.data);运行这个并发布数据,你从这个 –

0

可以使用window.postMessage在窗口之间传送数据:

$scope.openLargeGraph = function() { 
    var childWindow = window.open('graphs.html', "", "width=950,height=850"); 
    if(childWindow) //in case the new window blocked by browser 
     childWindow.postMessage($scope.data, '*'); 
}; 
在graphs.html

然后,添加消息事件侦听器:

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

得到的似乎是竞争条件(发布前聆听,因为你不能依靠子窗口加载时间) –

+0

是的,我没有看到它通过 – user2402107