2017-06-19 100 views
0

我想在訂閱我的表單字段之前用「 - 」替換空格。但我在訂閱時遇到錯誤。 錯誤類型錯誤:無效的事件目標Angular Observable和訂閱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"> 
      </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)); 
} 
} 
+0

任何其他的想法? –

回答

0

你可以用這種方法試試:

template: `<h1>Hello World!</h1> 
      <form [formGroup]="frm1"> 
      <input type="text" #nameInput formControlName="name" > 
      <input type="text" #familyInput formControlName="family"> 
      </form> 
      ` 
@ViewChild('nameInput') nameInputRef: ElementRef; 
@ViewChild('familyInput') familyInputRef: ElementRef; 

var keyup = Observable.fromEvent(this.familyInputRef.nativeElement , "keyup") 
       .map((data:string) => data.replace(' ','-')) 
       .debounceTime(400);    
    keyup.subscribe(x => console.log(x)); 
+0

是的,我以前用@Viewchild做過,但我已經在尋找一種基於formControlName的方法 –

0

您可以監視通過訂閱valueChanges在輸入字段的變化,可以用形式使用,然後使用patchValue分配新值。

所以做這樣的事情:

this.frm1.get('family').valueChanges.debounceTime(400).subscribe(value => { 
    this.frm1.get('family').patchValue(value.replace(' ', '-')) 
}) 

,你是好去! :)

DEMO

+0

作爲一種改進,你可以把這個控制'this.frm1.get('family')'放在一個變量中,像這樣:'const familyCtrl = this.frm1.get('family')',所以你不必在'subscribe'中一直調用'get'方法。另外請注意,如果你無限期地按空格(太快),它不會產生預期的結果,我建議將替換改爲:'.replace(/ \ s/g,' - ')':) [* * PLUNKER **](http://plnkr.co/edit/h49aMf9hCm7Tna2Q3qck?p=info) – developer033

+0

@ developer033你在跟蹤我嗎? :D:D是的,但你完全正確! :) – Alex

+1

這是因爲我看到最新的積極問題:)對不起,哈哈 – developer033