gpt4 book ai didi

angularjs - 打开新窗口angularjs后在 Controller 之间共享变量

转载 作者:行者123 更新时间:2023-12-04 15:12:08 24 4
gpt4 key购买 nike

我处于必须将用户定义的对象从一个 Controller 传递到另一个 Controller 的情况下,该 Controller 在新窗口中打开。为此,我尝试了几种常用方法,例如 $emit使用工厂或服务和 $broadcast 到 $rootScope从那里到第二个 Controller 。

但我总是卡在 rootscope 中。我可以在那里记录变量,但是当新窗口打开时它们似乎消失了(新窗口的控制台中甚至没有出现 undefined variable )。我可以从 rootscope 获得固定变量,但没有从第一个 Controller 发出。

有人知道我该如何解决这个问题吗?

这是我的代码:

// 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 环境不共享。你能做什么:

  • window.open() 中将数据作为 URL/路径参数传递,使用 $location 检索它们来自目标 Controller 的服务。
  • 如果支持,则使用浏览器的本地存储(选项卡之间不共享 session 存储,请参阅 ejain 的评论),如果不支持,则使用 cookie。
  • 关于angularjs - 打开新窗口angularjs后在 Controller 之间共享变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18850425/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com