2017-09-12 10 views
0

イベントを親コンポーネントに発行するEventEmitterがあります。親コンポーネントから一連の命令を実行し、結果が呼び出し元に返されます。 this.filteredList私はそれを求めていますリストを含むように親コンポーネントによって返されたが、それは返すとき、filteredListこれはデCHID成分「autocomplete.component.ts:」ですEventEmitterのangle2を使用した戻り値

未定義であるthis.changeFilter.emit、this.filteredListでリターンがある //未定義:

export class AutocompleteComponent implements OnInit { 
    ... 

    public filteredList = []; 

    @Output() changeFilter = new EventEmitter<any>(); 


    filter(){ 
    //This is where I want the filteredList to contain the list returned by the other component: 
    this.filteredList =this.changeFilter.emit({query:this.query}); 
    if (filteredList){ 
     console.log(filteredList); 
     } 
    } 

テンプレート:

<div class="container"> 
    <div class="input-field col s12"> 
     <input id="clienteAut" type="text" class="form-control bs-autocomplete" style="width:300px;" [(ngModel)]="query" (keyup)="filter()" on-click="filterAll()"> 
     <label for="clienteAut"></label> 
    </div> 
    <div class="divLista" *ngIf="filteredList.length > 0" style=""> 
     <div class="divFila" *ngFor="let item of filteredList"> 
     <ul > 
      <li> 
      <a (click)="select(item)">{{item.CodigoCliente}} - {{item.Nombre}}</a> 
      </li> 
     </ul> 
     </div> 
    </div> 
    </div> 

これは、親コンポーネント「busquedacompiadoras.component.ts」です:

//機能「onChangeFilterClientes」は、データとリストを返すが、それは子コンポーネントこれの持つEventEmitterに戻ったとき。 filteredListは定義されていません //任意のアイデアですか?

export class BusquedaCopiadorasComponent { 

clientes: Array<any> //= []; 

ngOnInit() { 
    this._comunService.getMarcas() 
     .subscribe((clientesData) => { 
      this.clientes = clientesData as clienteModel[]; 
      //this.rellenarMarcas(marcasData); 
     }); 
}  

onChangeFilterClientes(obj:any):any[]{   
    this.clientesFilter = this.clientes.filter(c => c.Nombre.toString().toLowerCase().indexOf(obj.query)>-1);  
    return this.clientesFilter; 
} 
+0

:AutocompleteComponentはのOnInit { ...

@Input() public filteredList = []; @Output() changeFilter = new EventEmitter<any>(); filter(){ //This is where I want the filteredList to contain the list returned by the other component: this.changeFilter.emit({query:this.query}); } 

そしてBusquedaCopiadorasComponentテンプレートは以下のようにfilteredListを渡すで実装

エクスポートクラスを'EventEmitter'は' Observable'の基底で、アクションはasynですc(あなたの現在のチャンクの同期コードが完了した後に起こります)。値の更新がいつ行われたかを通知するには、たとえば'ngOnChanges'を確認する必要があります。 –

+0

'filteredList'を代わりに' @Input() 'として定義し、それを親に設定するだけです。 'onChangeFilterClientes'から値を返す必要はありません。 '[filteredList] =" clientesFilter "'(HTML) – Arg0n

+0

申し訳ありませんが、あなたの説明の例を挙げることはできますか? – ararb78

答えて

0

次試してみてくださいので

[filteredList]="clientesFilter" 
+0

それは動作します!ありがとうございました! – ararb78

関連する問題