Angular 如何使输入可见?
我有一个带有一些输入的组件,我希望在它更改时收到通知。目前,我通过实现Angular 如何使输入可见?,angular,Angular,我有一个带有一些输入的组件,我希望在它更改时收到通知。目前,我通过实现ngOnChanges并找出哪些输入被更改,使其正常工作。但是,我更愿意将我的输入声明设置为@input('select-values')selectValues:Observable。您可以将它们包装成一个表单并侦听更改 this.myForm = fb.group({ 'sku': ['', Validators.required] }); this.sku = this.myForm.controls['
ngOnChanges
并找出哪些输入被更改,使其正常工作。但是,我更愿意将我的输入声明设置为@input('select-values')selectValues:Observable。您可以将它们包装成一个表单并侦听更改
this.myForm = fb.group({
'sku': ['', Validators.required]
});
this.sku = this.myForm.controls['sku'];
this.sku.valueChanges.subscribe(
(value: string) => {
console.log('sku changed to: ', value);
}
);
this.myForm.valueChanges.subscribe(
(value: string) => {
console.log('form changed to: ', value);
}
);
或
@组件({
...,
模板:“”
})
类MyComponent{
this.inputChange=新主题();
onChange(e){
this.inputChange.next(e);
}
}
另请参见本期《打开》事实上,不可能直接针对与DOM元素事件相关联的可观察对象进行注册。您需要直接引用DOM元素,然后使用Observable
的fromEvent
方法
以下是一个示例:
@Component({
(...)
template: `
<input #input />
`
})
export class SomeComponent {
@ViewChild('input')
input:ElementRef;
ngAfterViewInit() {
var eventObservable = Observable.fromEvent(
this.input.nativeElement, 'keyup');
}
}
如果只需要观察单个输入,可以快速执行以下操作:
在组件中:
ngOnInit() {
this.searchField = new FormControl();
this.searchField.valueChanges.subscribe(term => {
console.log('searching for', term);
});
}
在html中:
<input type="search" [formControl]="searchField">
还有可能取消Ngondestory中的订阅。这个问题不是关于输入属性的更改,不是关于表单输入的更改吗?如果是这样的话,我认为这两个答案都不应该被接受。我想答案应该是你提供的烹饪书的链接。更新的版本取代了旧版本:支持模板中的冷事件流(保留):很好很简单…:DOh snap这正是我想要的。为什么这件事在其他任何地方都没有被提及呢。谢谢值得注意的是,不能单独使用FormControl。你必须把它放在一个FormGroup中。
@Component({
(...)
template: `
<input [ngFormControl]='ctrl'/>
<child-component [select-values]="ctrl.valueChanges"></child-component>
`
})
export class SomeComponent {
constructor() {
this.ctrl = new Control();
this.ctrl.valueChanges.subscribe(...);
}
}
ngOnInit() {
this.searchField = new FormControl();
this.searchField.valueChanges.subscribe(term => {
console.log('searching for', term);
});
}
<input type="search" [formControl]="searchField">