【发布时间】:2017-01-01 10:31:38
【问题描述】:
我认为有一个简单的问题,但如果我的解决方案“正确”,我很难找到确认
我有一个子组件 SearchComponent 和 formControl
@Component({
selector : "my-search",
inputs : ["placeholder"],
template : `
<div class="searchForm">
<input type="text" [placeholder]="placeholder" [formControl]="search"/>
</div>
`
})
export class SearchComponent {
search = new FormControl();
public searchValues : Observable<string>;
constructor() {
this.searchValues = this.search.valueChanges
.debounceTime(400)
.distinctUntilChanged();
}
}
我在父组件的模板中使用这个
<div class="col-md-2 sidebar">
<my-search [placeholder]="'search'"></my-search>
</div>
我现在想从父级中订阅 searchValues Observable。我想出的最好的是:
export class MyListComponent implements AfterContentInit {
@ViewChild(SearchComponent) searchComponent: SearchComponent;
constructor(private myService: MyService ) {
}
ngAfterContentInit() {
this.searchComponent.searchValues.subscribe(s=>this.search(s))
}
private search(s: string) {
this.foos = this.myService.find(s);
}
foos: Observable<[Foo]>; // used on a ngFor | async
}
这是推荐的方法吗?有没有更好的方法来定义组件之间的契约(比如可以使用@Input 和@Output)?
【问题讨论】:
标签: angular observable rxjs5