我是AngularJS的新手,需要帮助,我正在使用angular的ngStorage,我将对象数据存储到$ sessionStorage,然后我以编程方式打开一个新表单,在那里我想访问$ sessionStorage值,但不幸的是我不能当我在另一个控制器中访问值时,它显示未定义的访问值。
这是第一个控制器代码:
smartApp.controller('mainController', function ($scope, $sessionStorage) {
$scope.generateInvoice = function () {
var promisesInvoice = assetRentService.getInvoice();
promisesInvoice.then(function (result) {
$sessionStorage.currentInvoice = result.data;
$window.open($rootScope.baseUrlMain+"#/invoice", '_blank');
}
}, function (err) {
//log errors here
}).finally(function () {
//finally block
});
};
});
但是当打开新选项卡时,虽然浏览器显示$ sessionStorage具有值,但是在该选项卡中未定义$ sessionStorage,
$scope.monthlyAssetItemRentInvoiceList = []
smartApp.controller('printController', function ($scope, $sessionStorage) {
$scope.monthlyAssetItemRentInvoiceList = $sessionStorage.currentInvoice;
});
在这个Print控制器中,它显示$ sessionStorage未定义,可能是什么问题,如何解决这个问题,还有一件事要说,我的客户要求是打开新标签并在那里显示数据,请帮助我在这。
答案 0 :(得分:0)
问题背后的主要原因是您尝试使用角度$sessionStorage
在两个浏览器标签之间传输数据。但您必须了解的主要事项是$sessionStorage
与浏览器的标签绑定。也就是说,$sessionStorage
中存储的值只能在浏览器选项卡中访问。为了达到这个要求,您可以使用cookie存储,本地存储甚至角度服务来在控制器之间传输数据。
答案 1 :(得分:0)
$ sessionStorage将仅可用于当前窗口(窗口会话)。您必须使用$ localStorage在窗口选项卡之间进行传输。
答案 2 :(得分:0)
smartApp.controller('mainController', function($scope) {
$scope.generateInvoice = function() {
var promisesInvoice = assetRentService.getInvoice();
promisesInvoice.then(function(result) {
localStorage.currentInvoice = JSON.stringify(result.data);
$window.open($rootScope.baseUrlMain + "#/invoice", '_blank');
}
},
function(err) {
//log errors here
}).finally(function() {
//finally block
});
};
});
$scope.monthlyAssetItemRentInvoiceList = []
smartApp.controller('printController', function ($scope) {
$scope.monthlyAssetItemRentInvoiceList = JSON.parse(localStorage.currentInvoice);
console.log($scope.monthlyAssetItemRentInvoiceList);
});
/*localStorage is associated to window.But you can use $localStorage to avoid, JSON.parse and stringify
.I am trying to show you, that localStorage is available across window*/