【发布时间】:2020-11-28 16:42:35
【问题描述】:
我遵循了从父组件获取pages并将其正确加载为*ngFor的设置,但是一旦我使用函数通过{{ getBookName(id) }}获取相关书名,即使它返回书对象,也找不到它的属性如book.name 并返回TypeError: Cannot read property 'name' of undefined
import { Component, OnInit, EventEmitter, Input };
import { Store } from '@ngrx/store';
import { AppStore } from '../shared/store.interface';
import * as BookSelectors from '../shared/book/book.selector';
@Component({
selector: 'app-pages',
template: `'
<button *ngFor="let page of pages">
page {{ page.number }} in {{ getBookName(page.book_id) }} <!-- page 32 in Book A -->
</button>'`,
styles: ['button{ border: 1px solid red }']
})
export class PagesComponent {
@Input() pages: any[] = []; // comes from parent component
constructor(private store$: Store<AppStore>) {}
getBookName(id: number) {
console.log(id) // 1
this.store$.select(BookSelectors.selectBookById, id).subscribe(
book => {
console.log(book) // {id: 1, name: 'Book A', author: 'author A'}
return book.name // TypeError: Cannot read property 'name' of undefined
}
)
}
}
【问题讨论】:
-
不要将函数与模板绑定试试这个。 var book$ = this.store$.select(BookSelectors.selectBookById, id)。并在模板中使用异步管道绑定这个 observable。就是这样。
-
!!!它在
*ngFor内部并使用不同的id作为第二个参数,我们如何将动态ids 从模板发送到没有功能的组件??
标签: angular observable ngrx ngrx-store