问题描述: 在使用Angular和ngrx时,我遇到了一个问题。我有一个对象,我想在模板中渲染它的属性。然而,当我尝试这样做时,模板会抛出一个错误,说属性未定义。
代码示例:
// component.ts
import { Component } from '@angular/core';
import { Store } from '@ngrx/store';
import { Observable } from 'rxjs';
interface AppState {
user: {
name: string;
age: number;
};
}
@Component({
selector: 'app-root',
template: `
{{ user.name }}
Age: {{ user.age }}
`,
})
export class AppComponent {
user$: Observable;
constructor(private store: Store<{ app: AppState }>) {
this.user$ = this.store.select('app', 'user');
}
}
解决方法: 在模板中渲染对象属性时,需要确保对象已经被正确地订阅并传递给模板。在这个例子中,我们需要使用AsyncPipe来处理Observable。
修改后的代码示例:
// component.ts
import { Component } from '@angular/core';
import { Store } from '@ngrx/store';
import { Observable } from 'rxjs';
interface AppState {
user: {
name: string;
age: number;
};
}
@Component({
selector: 'app-root',
template: `
{{ user.name }}
Age: {{ user.age }}
`,
})
export class AppComponent {
user$: Observable;
constructor(private store: Store<{ app: AppState }>) {
this.user$ = this.store.select('app', 'user');
}
}
在修改后的代码中,我们使用了*ngIf指令和AsyncPipe来订阅和解析Observable。这样,当数据可用时,模板中的用户属性将被正确地渲染出来。
希望这个解决方法对你有帮助!