2017-06-21 68 views
1

我得到錯誤:我的腳本無效的事件目標我之前用@ViewChild沒有任何問題,但當我嘗試使用FormGroup時,我得到了錯誤!可觀察的角度形式

import { Component , OnInit } from '@angular/core'; 
import {FormGroup,FormBuilder} from '@angular/forms'; 
import {Observable} from 'rxjs/Rx'; 

@Component({ 
selector: 'app-root', 
template: `<h1>Hello World!</h1> 
      <form [formGroup]="frm1"> 
      <input type="text" formControlName="name" > 
      <input type="text" formControlName="family" #family> 
      </form> 
      `, 

}) 

export class AppComponent implements OnInit{ 

frm1 : FormGroup; 

constructor(fb:FormBuilder){ 
    this.frm1 = fb.group({ 
     name : [], 
     family: [] 
    });  
} 
ngOnInit(){ 
    var keyup = Observable.fromEvent(this.frm1.get('family').value , "keyup") 
       .map((data:string) => data.replace(' ','-')) 
       .debounceTime(400);    
    keyup.subscribe(x => console.log(x)); 
} 
} 

回答

2

Observable.fromEvent的第一個參數需要是一個HTMLElement(對象),而不是它的值(字符串)。

但是你真的不需要手動創建觀察值,因爲FormControl已經爲你提供了valueChanges這是EventEmmitter。所以,你只需要做這樣的事情:

ngOnInit() { 
    var keyup = this.frm1.get('family').valueChanges 
      .map((data:string) => data.replace(' ','-')) 
      .debounceTime(400);    
    keyup.subscribe(x => console.log(x)); 
} 
+0

我這樣做之前刪除值,並得到錯誤:類型的參數「AbstractControl」是不能分配給類型的參數「EventTargetLike」。 類型'AbstractControl'不可用於鍵入'HTMLCollection'。 'AbstractControl'類型中缺少屬性'namedItem'。 –

+0

其實我不會這樣做。你可以通過局部變量引用來獲得HTMLFormElement,但最好使用'valueChanges'。檢查我更新的答案。簡單得多。 – dfsq

+0

我這樣做是因爲你寫了,但現在我得到了新的錯誤:this.frm1.get(...)。valueChanges.map不是函數 –