【发布时间】:2018-10-10 11:37:43
【问题描述】:
我需要执行这个祖父组件功能:
import { Component } from '@angular/core';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent {
public loginPage = true;
public login = function(){
this.loginPage = false;
}
public logout = function(){
this.loginPage = true;
}
}
来自这个孙子组件:
import { Component, OnInit } from '@angular/core';
@Component({
selector: 'app-dropmenu',
templateUrl: './dropmenu.component.html',
styleUrls: ['./dropmenu.component.css']
})
export class DropmenuComponent implements OnInit {
constructor() { }
ngOnInit() {
}
logout(){
sessionStorage.removeItem('token');
**//EXECUTE LOGOUT() GRANDPARENT FUNCTION HERE**
}
}
我发现与我想要的更接近的例子是创建一个像这样的 DataService:
import { Injectable } from '@angular/core';
import { BehaviorSubject } from 'rxjs';
@Injectable()
export class DataService {
private messageSource = new BehaviorSubject('default message');
currentMessage = this.messageSource.asObservable();
constructor() { }
changeMessage(message: string) {
this.messageSource.next(message)
}
}
然后在组件中做:
message: string;
this.data.currentMessage.subscribe(message => this.message = message)
//AND
this.data.changeMessage("Hello from Sibling")
但我不想传递任何消息,我只想执行一个函数,那么我真的需要创建那个 DataService 吗?我不能直接在祖父组件中制作一个 Observable 或其他东西吗? 如果是这样,有人可以给我一个例子吗?
【问题讨论】:
-
您可以解释您的身份验证策略以评论具体问题。可能您可以使用身份验证服务,并且可能是需要身份验证的路由的守卫,如果用户未通过身份验证,可以将守卫配置为重定向到登录页面。
-
我使用的认证很简单,app.component包含登录页面和主页。该应用程序以 isLoggedIn = false 开头,就像
<app-login *ngIf="!isLoggedIn"></app-login>一样,如果凭据成功,它会将 isLoggedIn 更改为 true,并像<app-main *ngIf="isLoggedIn"></app-main>那样加载主要组件。
标签: angular typescript rxjs