Exchange of variables between controllers after opening a new angularjs window

I am in a situation where I need to transfer a user object from one controller to another controller, which opens in a new window. I tried several common ways for this, for example $emit to $ rootScope, using a factory or service and $broadcast from there to the second controller.

But I was always stuck in root crops. I can register the variables there, but they seem to disappear when a new window opens (even undefined does not appear in the console of the new window). I can get fixed variables from root crops, but nothing that came from the first controller.

Does anyone have any ideas how I can solve this?

Here is my code:

 // 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) }) }); 
+6
source share
1 answer

You cannot do this. JS environment between windows / tabs is not used. What can you do:

  • Pass the data as URL / path parameters to window.open() , retrieve it using the $location service from the target controller.
  • Use local browser storage (session storage is not used between tabs, see comment from ejain), if supported, cookie if not.
+5
source

Source: https://habr.com/ru/post/953980/


All Articles