Angular 4获取Pipe的反应形式输入值

时间:2017-08-10 14:09:18

标签: angular pipe reactive angular4-forms

我有一个搜索字段,当我使用模板表单时,Pipes在多选框中过滤列表。但我改为反应形式,我找不到如何获得价值

<modal-content  [formGroup]="prodForm">


    <input type="text" id="make" class="form-control search"   
        placeholder="Make" formControlName="make"/>
    <input type="text" id="model" class="form-control search"
       placeholder="Model"  formControlName="model" />
    <input type="text" id="fromModelYear" class="form-control search"
       placeholder="From Model Year"  formControlName="fromModelyear"/>
   <input type="text" id="toModelYear" class="form-control search"
       placeholder="To Model Year" formControlName="toModelyear"/>

         <select id="selProduct" multiple formControlName="selProduct" 
             class="form-control">
            <option *ngFor="let product of productsList|searchMake: 
                 make|searchModel:model|searchFromYear:fromModelyear|
                     searchToYear:toModelyear" [value]="product"  >
                  {{product.makeModelModelYr}} 
                </option>
         </select>
       </modal-content>

我需要从输入字段中获取值以用于我尝试过的管道

<input type="text" id="model" class="form-control search"
   placeholder="Model"  formControlName="model" [value]="modeltxt"/>

然后在管道中使用 modeltxt

在管道中使用modeltxt.value

如果我在管道中有代码文本管道工作 我也试过

  ngOnInit() {
     this.prodForm.valueChanges.subscribe(v => this.modelValue = v.model);
  }

然后在管道中使用{{modelValue}} 代码使用模板表单我只需要知道如何格式化并获取值将其插入管道

这是其中一个管道

 import { Pipe, PipeTransform } from '@angular/core';

@Pipe({
  name: 'searchModel'
})
export class SearchModelPipe implements PipeTransform {

 transform(product: any, model: any): any {

//check if search term is undefined
if (model === undefined) return product;
//return updates people array
return product.filter(function(thisproduct) {
  return thisproduct.model.toLowerCase().includes(model.toLowerCase());
})
  }

}

2 个答案:

答案 0 :(得分:1)

要获取表单控件的值,必须从表单组中获取它。

例如,如果这是您组件中的表单组:

constructor(private fb: FormBuilder) {}

this.form = this.fb.group({
    name: ['', Validators.required]
});

然后,您就可以在模板中获取该表单组的name控件的值:

<p>{{form.get('name').value}}</p>

因此,如果您想要应用管道,只需将其添加到值:

之后
<p>{{form.get('name').value | myPipe}}</p>

答案 1 :(得分:1)

我的管道出错了我现在还必须检查null,这不会影响模板

 if (model === undefined||model===null) return product;

现在链条看起来像这样

 <select id="selProduct" multiple formControlName="selProduct"   class="form-control">
            <option *ngFor="let product of productsList |searchMake:prodForm.get('make').value|searchModel:prodForm.get('model').value|searchFromYear:prodForm.get('fromModelyear').value|searchToYear:prodForm.get('toModelyear').value" [value]="product"  >
             {{product.makeModelModelYr}} 
           </option>
         </select>