2017-07-21 3 views
-3

Ich arbeite an MEAN Stapel und eckig, und haben diese Methode unten in einem Winkelkomponente itemListDetailsComponent (in .ts-Datei) mit dem Namen:Refresh Winkelkomponente, wenn bezogenen Daten von einer anderen Winkelkomponente gespeichert wird

onStatusUpdateClick() { 

    this.activatedRoute.queryParams.subscribe((params: any) => { 
     console.log('queryParams', params['itemId']); 
     this.itemsUpdateService.updateItemStatus(
      params['itemId'], 
      this.activatedRoute.data).subscribe(data => { 
      this.itemsUpdateService.statusChanged.emit("Status Changed"); 
     }, error => {super.handleError(error, (err) => {console.log(err)})});    
    }); 

} 

auch ist es eine andere Winkelkomponente (itemsSideListComponent), die eine Liste aller Elemente mit ihrem Status anzeigt. Jetzt , sobald die itemsListDetailComponent speichert und aktualisiert den Status des ausgewählten Elements, muss ich Refresh die angezeigte Liste der Elemente in der itemsSideListComponent.

Alle Informationen, wie kann ich die itemsSideListComponent für die Liste der sichtbaren Elemente, sobald die Daten eines ausgewählten Elements aus dem itemListDetailsComponent wird gespeichert/aktualisiert aktualisieren. Bitte

helfen, wie ich zu Winkel völlig neu bin.

+0

Können die unten Wähler bitte kommentieren, warum gestimmt seine nach unten ..? – VS1

+0

Überprüfen Sie die Eigenschaft? '@Output()' von Komponenten. Verwenden Sie sie, nachdem ein ausgewähltes Element aus der itemListDetailsComponent gespeichert/aktualisiert wurde. –

+0

@RadouaneROUFID, kann u pls mehr abt Output Schlüsselwort erarbeiten - soll ich es als ein Attribut auf der Methode speichern oder auf der Komponentenklasse für den ‚itemListDetailsComponent‘? – VS1

Antwort

-1

Sie können Ereignis-Emitter-Service nutzen.

Hier ist die Dokumentation https://angular.io/api/core/EventEmitter

Wenn Sie mit der Arbeit in 1 Komponente ein Ereignis mit einigen spezifischen ID emittieren fertig sind. Und horchen Sie dieses Event auf Ihre gewünschte Komponente. Dort können Sie auch Daten an diese Listening-Komponente übergeben.

1

Ihre itemListDetailsComponent müssen ein Ausgabeereignis deklariert werden, die ausgelöst wird, wenn ein Element gespeichert wird/aktualisiert.

export class itemListDetailsComponent implements OnInit { 

    @Output() onSaveOrUpdate = new EventEmitter<Item>(); 

    onSave(item: any) { 
    // save and emit an event. 
    this.onSaveOrUpdate.emit(item); 
    } 

    onUpdate(item: any) { 
    // update and emit an event. 
    this.onSaveOrUpdate.emit(item); 
    } 
} 

Meine Antwort basiert auf einem assymption, dass die übergeordnete Komponente (Die Komponente, in der itemListDetailsComponent und itemsSideListComponent vorhanden) ist ‚orchestring‘ die Daten und Ihre Zwei-Komponenten sind juste verantwortlich für die Anzeige.

ParentComponent.html

<item-list-detail (onSaveOrUpdate)="doRefreshList($event)"></item-list-detail> 
<item-side-list [listToDisplay]="list"></item-side-list> 

Dies impliziert, dass itemsSideListComponent Nehmen wir als Eingabe die Daten anzuzeigen. Also:

export class itemListDetailsComponent { 

    @Input() 
    listToDisplay: any[]; 

} 

ParentComponent.ts

list: Item[] 

doRefreshList(item: any) { 

// Make a server call or add item to list... 
this.list.push(item); 
} 

Sie können eine Änderungserkennung vornehmen müssen je nachdem, ob Ihre Liste ist unveränderlich oder nicht.

+0

sollte die @Input() nicht auf ItemsSideListComponent Listenvariable sein. Außerdem rufe ich OnSaveOrUpdate() Methode innerhalb der ItemListDetailsComponent.html und die listToDisplay-Bindung befindet sich in itemsSideListComponent.html; und nicht auf ParentComponent.html. Von ParentComponent.html wird keine Methode aufgerufen. Wird es Ihnen möglich sein, die Antwort zu aktualisieren? – VS1

+0

Es hängt davon ab, wie Ihre Seite strukturiert ist. Sie haben nur zwei Komponenten und ElementeSideListComponent ist innerhalb itemListDetailsComponent? Bitte geben Sie uns HTML-Code –

Verwandte Themen