我有一个导航组件,我希望根据用户是否登录来显示或隐藏。为此,我添加了一个localStorage来确认用户已登录。但是,我的导航组件只在OnInit
期间听取此消息。
我如何让一个组件听取另一个组件的更改?在这种情况下,导航会响应登录组件的功能onlogin
。
navigation.component.ts
export class NavigationComponent implements OnInit {
private navshow: boolean;
if (localStorage.getItem('confirmo')){ this.navshow = true; }
}
signin.component.ts
export class SigninClass {
onlogin(){
localStorage.setItem('confirmo', 'verdad'); }
}
答案 0 :(得分:1)
看看以下链接。您可以使用可观察的服务和共享服务来实现这一目标。
答案 1 :(得分:1)
您可以跟踪更改内容或使用事件方法来“喊”'发生了变化。
所以创建一个单例服务。有发射方法。选择其他组件中的服务并订阅它。
即
服务
export class MessageInformation{
constructor(public name: string, public details: string, public extra?: any[]){
}
}
@Injectable()
export class MessagingService {
public parentFrameChangeEvent: EventEmitter<MessageInformation>;
constructor(){
this.parentFrameChangeEvent = new EventEmitter<MessageInformation>();
}
public sendMessage(message: MessageInformation): void{
this.parentFrameChangeEvent.emit(message);
}
}
然后注入你的调用构造函数并按原样使用
var reloadMessage: MessageInformation = { name: "reload", details: "forcereload", extra: tabIdArray };
this.messaging.sendMessage(reloadMessage);
(请注意,您不需要MessageInformation,它只是我用来传递额外信息的内部类)
然后在任何目标组件中注入相同的单例服务并订阅
this.messenger.parentFrameChangeEvent.subscribe(message => this.reloadData(message));
在该方法中,您可以完成登录事件
的所有工作