Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 如何使输入可见?_Angular - Fatal编程技术网

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">