2016-11-09 3 views
3

У меня есть ребенок компонент с этим шаблоном:Как уведомить родителя об изменении дочернего компонента?

<p *ngIf="user != null" > 
    Id: {{user.id}}<br> 
    Name: {{user.firstName}} {{user.lastName}}<br> 
    Nick: {{user.nickname}}<br> 
    Gender: {{user.gender}}<br> 
    Birthday: {{user.birthday}}<br> 
    Last login: {{user.lastUpdateDate}}<br> 
    Registered: {{user.registrationDate}}<br> 
</p> 

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

Как я могу сообщить родительскому компоненту, что данные были загружены и показаны?

+0

Что вы имеете в виду родитель? –

+0

Родительский компонент – andrew554

+0

Использование выходного сигнала. См. Https://angular.io/docs/js/latest/guide/template-syntax.html#!#inputs-outputs. '' –

ответ

10

Просто используя EventEmitter в дочернем компоненте (этот пример работает с событием click, вы можете генерировать событие, когда захотите).

@Component({ 
    selector: 'child-component', 
    template: ` 
    <button (click)="changeStatus(true)">Finish</button> 
    ` 
}) 
export class ChildComponent { 
    @Output() onStatusChange = new EventEmitter<boolean>(); 

    changeStatus(finished: bool) { 
    this.onStatusChange.emit(finished); 
    ... 
    } 
} 

@Component({ 
    selector: 'parent-component', 
    template: ` 
    <child-component 
     (onStatusChange)="childStatusChanged($event)"> 
    </child-component> 
    ` 
}) 
export class ParentComponent { 
    childStatusChanged(finished: boolean) { 
    if (finished){ 
     ... 
    } 
    ... 
    } 
} 

При нажатии на кнопку Finish, он будет вызывать метод ребенка changeStatus, где мы испускать ребенку onStatusChange событие. Он может быть заражен родителем, как показано в шаблоне родительского компонента. Это вызовет метод childStatusChanged, где вы делаете все, что хотите.

См Component Interaction статью в Angular.io docs для получения дополнительной информации

Смежные вопросы