【发布时间】:2016-11-18 14:56:15
【问题描述】:
大家好,我是 angular2 的初学者。我正在创建一个用于学习目的的小型演示应用程序。
app.component.ts
template: `
<header-content></header-content>
<main-content></main-content>
<footer-content></footer-content>
`
在我的标题中,我有一个导航部分,如主页、登录等。
主内容模板结构
<div class="container main">
<div class="row">
<router-outlet></router-outlet>
</div>
</div>
如您所见,我已将页眉和页脚部分链接的路由器出口放置在 main-content 中。
默认我在登录页面/login。
每个链接都有一个单独的组件。
我想要的是当用户点击登录页面上的提交按钮时,我会将他重定向到其他 xyz 页面。但与此同时,我希望我的登录链接从标题导航中隐藏并显示用户名。
<li *ngIf='!isUserLoggedIn'><a routerLink="/login">Login</a></li>
<li *ngIf='isUserLoggedIn'><a>Welcome {{user}}</a></li>
HeaderComponent.ts
@Component({
moduleId : module.id,
selector : 'header-content',
templateUrl: 'Header.html',
providers: [LoginService]
})
export class HeaderComponent implements OnInit {
isUserLoggedIn = false;
user : string;
constructor(private loginService: LoginService) { }
getUserName() :void {
this.user = this.loginService.getUserName(); // reading data from localstorage on page refresh
if(this.user) {
this.isUserLoggedIn = true;
}
}
ngOnInit(): void {
this.getUserName();
// Will fire everytime other component use the setter this.loginService.setLogged()
this.loginService.getLogged().subscribe((logged) => {
console.log('Welcome===>', logged);
});
}
}
Login-Service.ts
import { Injectable } from '@angular/core';
import { Subject } from 'rxjs/Subject';
import { Observable } from 'rxjs/Observable';
@Injectable()
export class LoginService {
username : string;
private logged: boolean;
private subject: Subject<boolean> = new Subject<boolean>();
setLogged(logged: boolean): void {
this.logged = logged;
this.subject.next(logged);
}
getLogged() {
return this.subject.asObservable();
}
constructor() {
if(localStorage.getItem('userName')){
this.username = localStorage.getItem('userName');
}
}
getUserName():string {
if(this.username)
return this.username;
}
}
我已经阅读了很多关于 stackoverflow 的其他问答博客,并且我尝试使用 observable,正如您在代码中看到的那样。但是,当我单击提交按钮时,不会调用 ngOnInit() 中的代码行( this.loginService.getLogged().subscribe((logged) => { )以更新 isUserLoggedIn 的值。
我怎样才能广播或触发一些机制,有什么方法和最好的方法。
我不知道自己做错了什么。
我的另一个问题是 header-content 中的方法如何与它的兄弟 main-content 或 footer-content 以及与父 my-app 组件部分。在许多问题中,答案是针对父子组件,但不是针对兄弟姐妹。
感谢任何帮助!!!
谢谢
【问题讨论】:
标签: angular angular2-components