从 Angular 5 组件访问超类字段
Access Superclass Fields from Angular 5 Component
我有一个包含组件通用功能的超类。
export class AbstractComponent implements OnInit {
public user: User;
constructor(public http: HttpClient) {
}
ngOnInit(): void {
this.http.get<User>('url').subscribe(user => {
this.user = user;
});
}
}
我有一个实现这个超类的子类。
@Component({
selector: 'app-header',
templateUrl: './header.component.html',
styleUrls: ['./header.component.scss']
})
export class HeaderComponent extends AbstractComponent {
constructor(public http: HttpClient) {
super(http);
}
}
在 headers 模板中,我正在尝试访问用户
<mat-toolbar color="primary">
<span *ngIf="user">Welcome {{user.username}}!</span>
</mat-toolbar>
但是用户字段没有解析。如何从子类访问超类的字段?
您收到错误消息,因为 user
对象在加载时不可用。
在模板中初始化它或使用安全导航运算符 (?.
)
初始化:
public user: User = new User();
安全导航:
<span>Welcome {{user?.username}}!</span>
这种方法有效,但不是一个好的做法。在这种情况下,最好使用 async
pipe:
export class AbstractComponent {
user$;
constructor() {
// your real http request should be here
this.user$ = Observable.of({name: 'John Doe'});
}
}
@Component({
selector: 'my-app',
template: `
<div>Hello {{(user$ | async).name}}</div>
`,
})
export class App extends AbstractComponent {
constructor() {
super();
}
}
我有一个包含组件通用功能的超类。
export class AbstractComponent implements OnInit {
public user: User;
constructor(public http: HttpClient) {
}
ngOnInit(): void {
this.http.get<User>('url').subscribe(user => {
this.user = user;
});
}
}
我有一个实现这个超类的子类。
@Component({
selector: 'app-header',
templateUrl: './header.component.html',
styleUrls: ['./header.component.scss']
})
export class HeaderComponent extends AbstractComponent {
constructor(public http: HttpClient) {
super(http);
}
}
在 headers 模板中,我正在尝试访问用户
<mat-toolbar color="primary">
<span *ngIf="user">Welcome {{user.username}}!</span>
</mat-toolbar>
但是用户字段没有解析。如何从子类访问超类的字段?
您收到错误消息,因为 user
对象在加载时不可用。
在模板中初始化它或使用安全导航运算符 (?.
)
初始化:
public user: User = new User();
安全导航:
<span>Welcome {{user?.username}}!</span>
这种方法有效,但不是一个好的做法。在这种情况下,最好使用 async
pipe:
export class AbstractComponent {
user$;
constructor() {
// your real http request should be here
this.user$ = Observable.of({name: 'John Doe'});
}
}
@Component({
selector: 'my-app',
template: `
<div>Hello {{(user$ | async).name}}</div>
`,
})
export class App extends AbstractComponent {
constructor() {
super();
}
}