ngStorage和$ window.localStorage之间的区别

时间:2016-04-14 15:37:53

标签: javascript angularjs local-storage angular-directive ng-storage

ngStorage和$ window.localStorage有什么区别?什么时候使用一个而不是另一个? 我必须选择其中一个用于Web应用程序。我必须保存配置文件用户和令牌的数据

4 个答案:

答案 0 :(得分:6)

变量$window通常是全局window变量。 Angular建议使用$window的原因是因为有时您想要模拟或替换"真正的" window对象(例如,用于测试目的)。

说这个,使用$window.localStorage表示您使用的是本地存储的vanilla API,而ngStorage是

  

AngularJS模块,使Web存储以Angular方式工作。   包含两项服务:$localStorage$sessionStorage

来源here

答案 1 :(得分:6)

这是正常的html5本地存储:

  

使用本地存储,Web应用程序可以在用户的​​浏览器中本地存储数据。在HTML5之前,应用程序数据必须存储在cookie中,包含在每个服务器请求中。本地存储更安全,可以在本地存储大量数据,而不会影响网站性能。与cookie不同,存储限制要大得多(至少5MB),信息永远不会传输到服务器。本地存储是每个源(每个域和协议)。来自一个来源的所有页面都可以存储和访问相同的数据。

它为您提供了访问存储的对象 - window.localStorage和window.sessionStorage

window.localStorage - 存储没有过期日期的数据

window.sessionStorage - 存储一个会话的数据,因此当浏览器选项卡关闭时数据会丢失

要检索数据,您可以执行类似这样的操作

localStorage.getItem("lastname"); 

因此,如果您想以角度方式执行此操作,则可以使用$ window服务,但它的行为与上面的示例相同。

Source

解决ngStorage:

  

AngularJS模块,使Web存储以Angular方式工作。包含两个服务:$ localStorage和$ sessionStorage。在$ window service中没有像你一样处理getter和setter

您可以在$ scope:

下通过引用传递$ localStorage或$ sessionStorage
$scope.$storage = $localStorage;

然后你可以使用$ storage as和其他角度变量

<body ng-controller="Ctrl">
    <button ng-click="$storage.counter = $storage.counter + 1">{{$storage.counter}}</button>
</body>

Source

如果您将在webapp中使用angularjs,我会使用ngStorage,因为您会更熟悉并熟悉语法。这只是我的意见。

答案 2 :(得分:0)

请注意,ngStorage内部使用Angular监视来监视$storage / $localStorage对象的更改,即需要使用摘要周期将新值可靠地保存到浏览器的本地存储中。通常不是问题,但如果您在$localStorage中存储值并在没有发生摘要循环的情况下打开新选项卡,则可能无法在新打开的选项卡/窗口中看到存储的值。

在IE上遇到这个问题,不得不使用window.localStorage来解决它。

答案 3 :(得分:0)

var setLocalStorage = function (token, uname)
{
$localStorage.token = token;
$localStorage.name = uname;

}
$timeout(setLocalStorage(token, userForm.uname), 500);
  

使用的模块:ngStorage

有效!