从新选项卡angularjs访问时,未定义ngStorage $ sessionStorage

时间:2016-11-02 12:04:37

标签: javascript angularjs asp.net-mvc

我是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未定义,可能是什么问题,如何解决这个问题,还有一件事要说,我的客户要求是打开新标签并在那里显示数据,请帮助我在这。

3 个答案:

答案 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*/