2017-06-19 134 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