gpt4 book ai didi

javascript - 为什么本地存储的条件不起作用?

转载 作者:行者123 更新时间:2023-12-03 00:56:06 25 4
gpt4 key购买 nike

在模板组件AppComponent中,根据值的不同,变量this.loggedInService.isLoggedInlogIn()logout() 方法,在应用程序组件 AppComponent 中订阅服务 LoggedinService 中的这些方法,并根据方法更改变量为 true 或 false。

同样在 Guard 的方法 checkLogin (url: string) 中,我根据变量 this.loggedInService.isLoggedIn 的值返回 true 或 false

一切正常,但是当我重置页面时,我需要保留输入或输出按钮的值。我尝试在服务中的 login()logout() 方法中执行此操作,但重新加载页面后,更改仍然未保存。帮助解决此问题,以便页面重新启动后保留更改。

AppComponent 模板:

          <li class="nav-item">
<a class="btn btn-outline-success"
[class.btn-outline-success]="!this.loggedInService.isLoggedIn"
[class.btn-outline-danger]="this.loggedInService.isLoggedIn"
(click)="this.loggedInService.isLoggedIn ? logout() : logIn()">
{{this.loggedInService.isLoggedIn ? 'Exit' : 'Enter'}}
</a>
</li>

AppComponent代码:

export class AppComponent implements OnInit {

constructor(private loggedInService: LoggedinService,
private router: Router) {
}

ngOnInit() {}

logIn(): void {
this.loggedInService.login();
if (this.loggedInService.isLoggedIn) {
let redirect = this.loggedInService.redirectUrl ? this.loggedInService.redirectUrl :
'/gallery';
this.router.navigate([redirect]);
}
}

logout(): void {
this.loggedInService.logout();
this.router.navigate(['/']);
}
}

登录服务:

export class LoggedinService implements OnInit {
isLoggedIn: boolean = false;
redirectUrl: string;

constructor() {

}

ngOnInit() {
this.CheckAuthentication();

}
enter code here
CheckAuthentication(): boolean {
if (localStorage.getItem('login') === 'true') {
return this.isLoggedIn = true;
} else if (localStorage.getItem('login') === 'false') {
return this.isLoggedIn = false;
}
}

login() {
localStorage.setItem('login', 'true')
}

logout() {
localStorage.removeItem('login');
localStorage.setItem('login', 'false')
}

AuthGuard:

export class AuthGuard implements CanActivate {
constructor(private loggedInService: LoggedinService) {
}

canActivate(next: ActivatedRouteSnapshot,
state: RouterStateSnapshot): boolean{
let url: string = state.url;
return this.checkLogin(url);
}

checkLogin(url: string): boolean {
if (this.loggedInService.isLoggedIn) {
return true;
} else {
this.loggedInService.redirectUrl = url;
return false;
}
}
}

最佳答案

isLoggedIn 更改为基于 localStorage 项的 get 方法

export class LoggedinService implements OnInit {

redirectUrl: string;

constructor() {}

get isLoggedIn(): boolean {
return localStorage.getItem('login') ? true : false;
}

login(){
localStorage.setItem('login','true')
}

logout(){
localStorage.removeItem('login')
}

}

app.component

export class AppComponent {
constructor(private loggedInService: LoggedinService,
private router: Router) {
}

logIn(): void {
this.loggedInService.login(); // set the state as login
let redirect = this.loggedInService.redirectUrl ? this.loggedInService.redirectUrl :
'/gallery';
this.router.navigate([redirect]);
}

logout(): void {
this.loggedInService.logout(); //// set the state as logout
this.router.navigate(['/']);
}
}

stackblitz demo

关于javascript - 为什么本地存储的条件不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52834587/

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