什么是AngularJS中管理状态的最佳方式

时间:2016-05-07 05:50:02

标签: angularjs

我是一名ASP.Net开发人员,正在尝试学习AngularJS。有几种方法可以在asp.net中管理状态,例如Session,ViewState,Cookies等。

有人可以向我解释或指导我一个很好的例子,它展示了angularJs中的状态管理最佳实践。

例如,一旦用户登录到应用程序,我想将当前用户对象存储在客户端。

6 个答案:

答案 0 :(得分:5)

有很多方法可以维持状态。您可以使用AngularJS中的“$ scope”或“$ rootScope”来维护状态。

例如: -

angular.module('SampleApp')
  .controller('ExampleCtrl', ['$scope', '$rootScope', ExampleCtrl])
  function ExampleCtrl($scope, $rootScope) {

     // for set data
     $scope.data="Hello";
     $rootScope.Globaldata="Hello World";
  }

在上面的例子中,“$ scope”用于页面级别或局部变量,“$ rootScope”用于全局维护状态。

您可以在应用程序的任何位置访问“$ rootScope”的值,而不使用“$ scope”的值。

存储或维护数据的另一种方法是使用LocalStorage: -

您可以使用“angular-local-storage”和“ngCookies”存储您的值。 请点击以下链接: -

https://docs.angularjs.org/api/ngCookies/service/$cookies

答案 1 :(得分:2)

您可以使用angular-local-storagengCookies来保存状态并提供持久性。此外,您可以在较新的浏览器中使用IndexedDB存储来提供持久性,条件是它在所有浏览器中都不可用。

更好的策略是使用IndexedDB,localStorage,ngCookies与回退到in-memory存储的组合。为了做到这一点,你需要有一个一致的api / service来提供这个功能,并在服务本身内优雅地处理后备,这样服务的消费者就不需要为回退机制而烦恼了

答案 2 :(得分:1)

伍-饼干

您可以添加Angular服务ng-cookies,这可以在您将cookie注入模块时存储和检索Cookie。 Here是指向文档的链接。

添加新服务

要向角度应用添加新服务,首先需要下载js文件并将其添加到index.html中(来自CDN)

<script type="text/javascript" src=""//ajax.googleapis.com/ajax/libs/angularjs/X.Y.Z/angular-cookies.js""></script>

加载到应用

在任何模块中,你想使用像这样的ng-cookies注入

angular.module('app', ['ngCookies']);

结论

您的应用现在可以访问ng-cookies附带的读写Cookie方法但请记住,CookieStore服务已弃用,因此仅使用ng-cookie

来自Angular Docs的

  

注意:不推荐使用$ cookieStore服务。请改用$ cookies服务。

除此之外,Docs还不错。祝你好运。

答案 3 :(得分:1)

检出此库https://www.npmjs.com/package/angularjs-store

这可以帮助您更轻松地管理应用程序状态,因为它将迫使您在应用程序上进行单一方式的数据流。

答案 4 :(得分:0)

有很多方法可以做到这一点。我在我的应用程序中使用基于https://github.com/alarv/ng-login的示例代码。我正在使用令牌来验证请求。

示例代码演示

  1. 将用户信息保存在名为“会话”的服务中。
  2. 2.statechangeEvents以处理带角色的身份验证。

    1. 用于处理http中的身份验证/授权错误的拦截器 要求。
    2. 如果您还要保护html资源,则可能需要将页面从服务器端重定向到登录页面。

答案 5 :(得分:0)

这在很大程度上取决于您在后端使用何种身份验证机制。我为我的项目使用基于令牌和无会话的系统,因此我使用浏览器本地存储来存储身份验证令牌,但如果您使用的是会话,则需要使用cookies。

如果使用本地存储,请确保在保存和检索该Object时首先使用JSON.stringify(),确保使用JSON.parse()

localstorage的缺点:仅支持html5

因此,如果您的网站需要支持旧浏览器,则需要对Cookie进行备份。