我有一个引导程序导航栏,它有像用户配置文件和其他“登录后”组件的按钮。 现在,我登录或注销后,我想告诉组件拥有导航栏,用户不再有效或与用户刚刚登录的组件相反,因此在导航栏上显示元素如何告诉导航栏用户刚刚登录或注销角2和引导
1
A
回答
3
我从官方角度2 example工具这个想法,展示父母和孩子之间的沟通。虽然它不是父母和孩子,但我认为它是一种很好的方法,它的工作对我来说是完美的。好的,所以我们需要为此创建一个服务,以帮助在登录组件(和注册组件)和导航栏组件之间进行通信。 我称之为:LocalStorageService,因为我将用户对象存储在本地存储中。
import { Injectable, OnInit } from '@angular/core';
import { Subject } from 'rxjs/Subject';
@Injectable()
export class LocalStorageService {
private missionAnnouncedSource = new Subject<string>();
private logoutAnnoucedSource = new Subject<string>();
loginAnnounced$ = this.missionAnnouncedSource.asObservable();
logoutAnnounced$ = this.logoutAnnoucedSource.asObservable();
announceLogin(mission: string) {
this.missionAnnouncedSource.next(mission);
}
announceLogout(){
this.logoutAnnoucedSource.next(null);
}
}
很大,现在我们只需要宣布登录或注销的导航栏组件登录内部或注册组件:在导航栏部分我把它叫做app.component
import { Component, OnInit } from '@angular/core';
import { Router } from '@angular/router';
import { LocalStorageService } from '../../services/localStorage.service';
@Component({
moduleId: module.id,
selector: 'login',
templateUrl: 'login.component.html'
})
export class LoginComponent implements OnInit {
model: any = {};
loading = false;
constructor(
private localStorageService: LocalStorageService)
{ }
login() {
this.announce();
this.router.navigate(['/UserProfile']);
}
announce() {
let currentUser = JSON.parse(localStorage.getItem('currentUser'));
if (currentUser && currentUser.token) {
return this.localStorageService.announceLogin(currentUser);
}
}
}
好,现在我们需要 “听” 到这些公告:
import { Component } from '@angular/core';
import { LocalStorageService } from './services/localStorage.service';
import { Subscription } from 'rxjs/Subscription';
@Component({
moduleId: module.id,
selector: 'my-app',
templateUrl: 'app.component.html',
})
export class AppComponent {
subscription: Subscription;
constructor(private localStorageService: LocalStorageService) {
this.subscription = localStorageService.loginAnnounced$.subscribe(
currentUser => {
this.currentUser = currentUser;
});
this.subscription = localStorageService.logoutAnnounced$.subscribe(
empty => {
this.currentUser = null;
});
//when the app refresh or initialized
this.currentUser = JSON.parse(localStorage.getItem('currentUser'));
}
}
现在这是app.component.html:
<nav class="navbar navbar-inverse navbar-fixed-top">
<div class="container-fluid">
<div class="navbar-header">
<button *ngIf="currentUser" type="button" class="navbar-toggle" (click)="isCollapsed = !isCollapsed">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="#"><img alt="Brand" src="app/images/syte_logo.png"></a>
</div>
<div class="collapse navbar-collapse" [collapse]="isCollapsed">
<ul *ngIf="currentUser" class="nav navbar-nav">
<li *ngIf="currentUser" routerLinkActive="active"><a [routerLink] = "['/Analytics']" (click)="isCollapsed = !isCollapsed">Analytics</a></li>
<li *ngIf="currentUser" routerLinkActive="active"><a [routerLink] = "['/Integration']" (click)="isCollapsed = !isCollapsed">Integration</a></li>
<li *ngIf="currentUser" routerLinkActive="active"><a [routerLink] = "['/FAQ']" (click)="isCollapsed = !isCollapsed">F.A.Q</a></li>
<li *ngIf="currentUser" routerLinkActive="active"><a [routerLink] = "['/Terms']" (click)="isCollapsed = !isCollapsed">Terms</a></li>
<li *ngIf="currentUser" routerLinkActive="active"><a [routerLink] = "['/Contact']" (click)="isCollapsed = !isCollapsed">Contact</a></li>
</ul>
<ul class="nav navbar-nav navbar-right">
<li *ngIf="currentUser" routerLinkActive="active">
<a [routerLink] = "['/UserProfile']" (click)="isCollapsed = !isCollapsed">
Hi, {{currentUser.name}}
</a>
</li>
</ul>
</div> <!--collapse-->
</div>
</nav>
<div class="container">
<div class="starter-template">
<alert-custom></alert-custom>
<router-outlet></router-outlet>
</div>
</div>
相关问题
- 1. 如何确保用户刚刚登录?
- 2. 登录后更改按钮登录注销o导航栏引导
- 3. 导航菜单指令刷新用户登录或注销
- 4. 如何在登录或注销CakePHP 3后更改导航栏功能?
- 5. 如何检查刚刚Google用户在Firebase中第一次登录的用户
- 6. 在Django测试中无法登录刚刚创建的用户
- 7. 登录和注销导致死循环
- 8. 登录页面和导航栏
- 9. PHP导航栏和登录页面
- 10. 注销按钮navigationController问题导航栏
- 11. 禁止用户在注销后导航。
- 12. 增加排水沟与刚刚CSS引导
- 13. 登录用户名和姓不会显示在导航栏上
- 14. 导航栏不使用NG-引导和角4
- 15. 引导导航栏下拉登录的方式做出反应
- 16. 登录后使用标签栏导航
- 17. 引导3 - 关闭导航栏和子导航栏
- 18. Node/Angular 2:更新导航栏并在用户登录后显示侧栏
- 19. 如何更改我的Prestashop导航栏的登录状态? (登录/注销按钮)
- 20. 角2侧边栏组件导航
- 21. 刚刚发布的Android应用,Google Play未登录
- 22. 阵营引导导航栏
- 23. 引导侧面导航栏
- 24. 引导导航栏倒塌
- 25. 引导导航栏在AngularJs
- 26. 引导:内部导航栏
- 27. 导航栏在引导
- 28. 引导导航栏显示
- 29. Jquery移动导航堆栈当注销并返回登录
- 30. 数据库驱动导航中的登录/注销链接?
你有什么尝试?你能提供任何代码吗?如果你能做到这两件事,你会得到更好的响应。 – A1raa
@A1raa我回答了我的问题,如果你能对此发表评论并让我知道你的想法会是多么令人惊讶... – dang