gpt4 book ai didi

javascript - 在 Angular 中检查 sessionStorage 并将变量传递给 $scope 的正确方法是什么?

转载 作者:行者123 更新时间:2023-12-03 11:03:51 26 4
gpt4 key购买 nike

我已经创建了一个基于 token 的身份验证系统,但需要一种方法让 Angular 知道用户是否登录。

登录的用户将在 session 存储中拥有身份验证 token 。我想设置一个变量,例如 $scope.isLoggedIn = true,如果 if ( $window.sessionStorage.token ) 为 true。

然后我将使用 ng-if="isLoggedIn" 根据需要显示和隐藏页面上的元素。当然,在显示任何个人信息之前,都会对 token 进行身份验证。这基本上是显示或隐藏登陆页面的一种方式。

我可以在 Controller 中执行此操作,但我必须在每个 Controller 中执行此操作。我可以通过工厂来做吗?

这是我尝试过的,但是有更好的方法吗?谢谢。

app.config中:

$httpProvider.interceptors.push('authCheck')

app.factory中:

//
// set a scope variable for whether a user is signed in or not
//
.factory('authCheck', [ '$window', '$rootScope', function ( $window, $rootScope ) {
$rootScope.isLoggedIn = false;

if ( $window.sessionStorage.token ) {
$rootScope.isLoggedIn = true;
}

return $rootScope.isLoggedIn;
}])

最佳答案

我已经使用服务做了类似的事情。我的有点复杂,因为我是从 indexeddb 而不是 localstorage 获取数据(我相信 ls 是同步而不是异步。

无论如何,我的代码最终是这样的......

angular.module('App').service('DataService', ['$indexedDB', 'storeName', 'emptyCharacter', function($indexedDB, storeName, newObject){
function function1(propertyName){
return "something";
};

function function2(objects){
return 55;
};

return {
foo : function1,
bar : function2
};
}]);

然后我在 Controller 中访问它,如下所示:

angular.module('App').controller('Controller', ['$scope', '$interval', 'DataService', function($scope, $interval, DataService) {

var somevar = DataService.function1();
}]);

正如您所看到的,这与您的想法非常相似。我认为这是一条非常好的路线。

关于javascript - 在 Angular 中检查 sessionStorage 并将变量传递给 $scope 的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27954616/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com