【发布时间】:2019-09-06 10:43:14
【问题描述】:
我浏览了网络,发现使用本地存储的最佳方法是将其放在服务中 我有一个登录控制器,它在响应中发送 API 令牌和用户详细信息 我在本地存储中设置这些详细信息然后我使用角度路由器导航到标题中的仪表板我正在获取设置的本地存储但DOM没有更新我虽然如果我订阅了本地存储服务它会更新但ti不起作用可以有人指出我在正确的方向上,我需要做些什么来在用户登录时更新标题,我应该使用不同类型的本地存储,因为那里还有其他存储提前谢谢你
/*header Component*/
import { Component, OnInit } from '@angular/core';
import { SharedService } from '../shared.service';
import { Router } from '@angular/router';
import { LocalStorageService } from '../../global-services/localstorage.service';
@Component({
selector: 'app-header',
templateUrl: './header.component.html',
styleUrls: ['./header.component.scss']
})
export class HeaderComponent implements OnInit {
user: any;
constructor(
private Shared: SharedService,
private router: Router,
private local: LocalStorageService) { }
fave: any;
ngOnInit() {
this.getLocal();
}
getLocal() {
this.local.getLocal().subscribe(
data => {
this.user = data;
}
);
}
logout() {
this.local.logout();
}
}
/*LocalStorage Service*/
import { Injectable, OnDestroy } from '@angular/core';
@Injectable({
providedIn: 'root'
})
export class LocalStorageService {
setLocal(user) {
return localStorage.getItem(user);
}
getLocal() {
return localStorage.getItem('user')
}
logout() {
return localStorage.removeItem('user');
}
}
/* Login Component*/
import { Component, OnInit } from '@angular/core';
import { LoginService } from '../login.service';
import { Router } from '@angular/router';
import { LocalStorageService } from '../../global-services/localstorage.service'
@Component({
selector: 'app-login',
templateUrl: './login.component.html',
styleUrls: ['./login.component.scss']
})
export class LoginComponent implements OnInit {
constructor(
private api: LoginService,
private router: Router,
private local: LocalStorageService) { }
/*Vars*/
user: any;
email: string;
password: string;
ngOnInit() {
}
onSubmit() {
this.api.login(this.email, this.password).subscribe(
data => {
this.user = data;
localStorage.setItem('api_token', this.user.api_token),
localStorage.setItem('user', JSON.stringify(this.user));
this.router.navigateByUrl('/dashboard');
}
);
this.local.setLocal(this.user);
}
}
/*Header HTML*/
<nav class="uk-navbar-container uk-margin nav1" uk-navbar="mode: click" *ngIf="router.url != '/login'">
<div class="uk-navbar-left">
<ul class="uk-navbar-nav nav1">
<li class="uk-active nav1"><a href="/dashboard">Dashboard</a></li>
<li class="nav1"><a href="/form">Create form</a></li>
<li class="nav1"><a uk-icon="icon: books" href="/books"></a></li>
</ul>
</div>
<div class="uk-position-right favBtn">
<a *ngIf="this.user !== null" uk-icon="icon: user" class="uk-button uk-button-default"style="border:none;">{{user.message}} {{user.last_name}}</a>
<a uk-icon="icon: sign-in" *ngIf="this.user == null" href="/login" style="border:none; color:white;">Login</a>
<div *ngIf="this.user !== null" uk-dropdown="mode: click" class=" uk-width-large" uk-dropdown>
<hr class="uk-divider-icon uk-width-1-1">
<div class="uk-child-width-1-1@s" uk-grid>
<a uk-icon="icon: sign-out" href="/login" (click)="logout()">Logout</a>
</div>
</div>
</div>
</nav>
【问题讨论】:
标签: angular typescript