Ошибка разбора шаблона angular2 pipe

Я пытаюсь реализовать простой поиск с использованием труб. Я действительно новичок в понятиях pipe и angular2, поэтому мне нужна ваша помощь

вот мой HTML:

<input  type="textarea"  placeholder="branch" [(ngModel)]="search.branch" name="branch">
 <tr *ngFor="let loan of loans | loanfilter:search.branch ">
            <td><input type="checkbox"></td>
            <td>{{loan.loanId}}</td>
            <td>{{loan.custName}}</td>
            <td>{{loan.vehicleNum}}</td>
            <td>{{loan.TC}}</td>
            <td>{{loan.RE}}</td>
        </tr>

loan.component.ts:

import { Component } from '@angular/core';
import { LoanService } from '../../services/loans.service';
import { Loan } from '../../../loan';
import { Injectable, Pipe, PipeTransform } from '@angular/core';
import { LoanFilterPipe } from '../../pipes/loan.pipe';

@Component({
    moduleId: module.id,
    selector: 'loans',
    templateUrl: './loans.component.html',
    providers: [LoanService],
    declarations: [LoanFilterPipe]  //getting error on this line: Object literal may only specify known properties, and 'declarations' does not exist in type 'Component'.
})

export class LoansComponent{

    loans : Loan[];
    custName: any;

    constructor(private loanService: LoanService){
        this.getloans();
    };

    getloans(){
        this.loanService.getLoan()
            .subscribe(loans => {
                this.loans = loans;
                console.log(loans);
            });

    }
};

ошибки, которые я получаю:

Uncaught (в обещании): ошибка: ошибки синтаксического анализа шаблона: невозможно связать с 'ngModel', так как это не известное свойство 'input'

loan.pipe.ts:

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

@Pipe({
    name: 'loanfilter'
})

export class LoanFilterPipe implements PipeTransform{
    transform(loans: any[], args: any): any{
        return loans.filter(item => item.title.indexOf(args[0].title) !== -1);
    }
}

Я также использовал файл module.ts для объявления канала и всех других компонентов:

import { NgModule }      from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { HttpModule } from '@angular/http';

import { LoansComponent } from './components/loans/loans.component';
import { LoanFilterPipe } from './pipes/loan.pipe';
import { AppComponent }  from './app.component';

@NgModule({
  imports:      [ BrowserModule, HttpModule ],
  declarations: [ AppComponent, LoansComponent, LoanFilterPipe ],
  bootstrap:    [ AppComponent ],
  exports:      [LoanFilterPipe]
})

export class AppModule { }

3 ответа

Решение

Импортировать FormsModule в вашем модуле приложения.

import { NgModule }      from '@angular/core';
import { FormsModule }   from '@angular/forms';
import { BrowserModule } from '@angular/platform-browser';
import { HttpModule } from '@angular/http';

import { LoansComponent } from './components/loans/loans.component';
import { LoanFilterPipe } from './pipes/loan.pipe';
import { AppComponent }  from './app.component';

@NgModule({
  imports:      [ BrowserModule, HttpModule, FormsModule ],
  declarations: [ AppComponent, LoansComponent, LoanFilterPipe ],
  bootstrap:    [ AppComponent ],
  exports:      [LoanFilterPipe]
})

export class AppModule { }

Вам не хватает FormsModule в вашем коде

потому что в соответствии с угловым FormsModule это необходимо добавить во время начальной загрузки, если вы используете ngModel потому что на данный момент ngModel является частью FormModule

Поскольку другие ответы предполагают, что вы должны импортировать FormsModule

Также вы установили search.branch как ngModel, который не объявлен в файле машинописи компонентов.

А также вы не должны давать declarations массив в компонентном декораторе. Удалить declarations: [LoanFilterPipe] от @компонента.

Он указан в NgModule. Вам не нужно помещать его в экспорт, если вы не собираетесь использовать его в другом модуле.

Другие вопросы по тегам