我是一名ASP.Net开发人员,正在尝试学习AngularJS。有几种方法可以在asp.net中管理状态,例如Session,ViewState,Cookies等。
有人可以向我解释或指导我一个很好的例子,它展示了angularJs中的状态管理最佳实践。
例如,一旦用户登录到应用程序,我想将当前用户对象存储在客户端。
答案 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”存储您的值。 请点击以下链接: -
答案 1 :(得分:2)
您可以使用angular-local-storage
,ngCookies
来保存状态并提供持久性。此外,您可以在较新的浏览器中使用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
注意:不推荐使用$ cookieStore服务。请改用$ cookies服务。
除此之外,Docs还不错。祝你好运。
答案 3 :(得分:1)
检出此库https://www.npmjs.com/package/angularjs-store
这可以帮助您更轻松地管理应用程序状态,因为它将迫使您在应用程序上进行单一方式的数据流。
答案 4 :(得分:0)
有很多方法可以做到这一点。我在我的应用程序中使用基于https://github.com/alarv/ng-login的示例代码。我正在使用令牌来验证请求。
示例代码演示
2.statechangeEvents以处理带角色的身份验证。
如果您还要保护html资源,则可能需要将页面从服务器端重定向到登录页面。
答案 5 :(得分:0)
这在很大程度上取决于您在后端使用何种身份验证机制。我为我的项目使用基于令牌和无会话的系统,因此我使用浏览器本地存储来存储身份验证令牌,但如果您使用的是会话,则需要使用cookies。
如果使用本地存储,请确保在保存和检索该Object时首先使用JSON.stringify(),确保使用JSON.parse()
localstorage的缺点:仅支持html5
因此,如果您的网站需要支持旧浏览器,则需要对Cookie进行备份。