打开新窗口angularjs后在控制器之间共享变量
我所处的情况是,我必须将用户定义的对象从一个控制器传递到另一个控制器,该控制器在新窗口中打开。我尝试了几种常见的方法,例如使用工厂或服务将打开新窗口angularjs后在控制器之间共享变量,angularjs,angularjs-service,Angularjs,Angularjs Service,我所处的情况是,我必须将用户定义的对象从一个控制器传递到另一个控制器,该控制器在新窗口中打开。我尝试了几种常见的方法,例如使用工厂或服务将$emit转换为$rootScope,并将$broadcast从那里转换到第二个控制器 但我总是被困在根镜里。我可以将变量记录在那里,但当新窗口打开时,它们似乎消失了(甚至在新窗口的控制台中也不会出现未定义的变量)。我可以从rootscope获得固定变量,但没有从第一个控制器发出任何内容 有人知道我如何解决这个问题吗 这是我的密码: // SHARING DA
$emit
转换为$rootScope,并将$broadcast
从那里转换到第二个控制器
但我总是被困在根镜里。我可以将变量记录在那里,但当新窗口打开时,它们似乎消失了(甚至在新窗口的控制台中也不会出现未定义的变量)。我可以从rootscope获得固定变量,但没有从第一个控制器发出任何内容
有人知道我如何解决这个问题吗
这是我的密码:
// SHARING DATA BETWEEN CONTROLLERS VIA ROOT SCOPE:
var table_app = angular.module("tableApp", [])
.factory("sharedVars", function($rootScope, $log) {
/*
Receive emitted message and broadcast it.
*/
$rootScope.$on("handleEmit", function(event, object){
var value1 = object.data1;
var value2 = object.data2;
var value3 = object.data3;
$log.log(value2, value3) // WORKS
$rootScope.$broadcast("handleBroadcast",
{data1: value1, data2: value2, data3: value3});
})
// JUST TO CHECK IF I CAN GET DATA FROM HERE:
return { fixedSharedObject: {data1: 22, data2: 33, data3: 44}} // WORKS
})
.controller("FirstCtrl", function ($scope, $rootScope, $q, $log, sharedVars) {
$scope.onClick = function(number, adress) {
newWindow = window.open(adress, "Zweitfenster", "width=700, height=900");
newWindow.focus();
var lineNumber = document.getElementById("lineCell" + number).innerHTML;
var blockNumber = document.getElementById("blockCell" + number).innerHTML;
var tripId = document.getElementById("tripCell" + number).innerHTML;
$log.log(lineNumber, blockNumber, tripId); // WORKS
$scope.$emit("handleEmit",
{data1:lineNumber, data2: blockNumber, data3: tripId});
}
})
.controller("SecondCtrl", function($scope, $rootScope, $log, sharedVars){
$scope.singleTripLineNumber = sharedVars.fixedSharedObject; // WORKS
$scope.singleTripBlockNumber = sharedVars.fixedSharedObject;
$scope.$on("handleBroadcast", function(event, object){
var value1 = object.data1;
var value2 = object.data2; // DOES NOT WORK!
var value3 = object.data3;
$log.log(value3)
})
});
你不能这样做。窗口/选项卡之间的JS环境不共享。你能做什么:
- 将数据作为URL/path参数传递到
,使用window.open()
服务从目标控制器检索数据$location
- 如果支持,请使用浏览器的本地存储(会话存储不在选项卡之间共享,请参阅ejain的注释),如果不支持,请使用cookies