Подтвердить что ты не робот

Angular2 функция вызова родительского компонента

У меня есть приложение, в котором у меня есть компонент загрузки, где я могу загрузить файл. Он встроен в body.component.

При загрузке он должен использовать функцию (например, BodyComponent.thefunction()) родительского компонента (выполнить вызов для обновления данных): но только в том случае, если родительский элемент является специально body.component. Загрузка может также использоваться в другом месте с различным поведением.

Что-то вроде parent(this).thefunction(), как это сделать?

4b9b3361

Ответ 1

Я бы создал пользовательское событие в дочернем компоненте. Что-то вроде этого:

@Component({
  selector: 'child-comp',
  (...)
})
export class ChildComponent {
  @Output()
  uploaded:EventEmitter<string> = new EventEmitter();

  uploadComplete() {
    this.uploaded.emit('complete');
  }

Ваш родительский компонент может зарегистрироваться на этом мероприятии

@Component({
  template `
    <child-comp (uploaded)="someMethod($event)"></child-comp>
  `,
  directives: [ ChildComponent ]
})
export class ParentComponent {
  (...)

  someMethod(event) {
  }
}

Другим способом было бы вставить родительский компонент в дочерний, но они будут сильно связаны друг с другом...

Ответ 2

Вы можете добавить родительский компонент к дочернему компоненту.

Подробнее см.
- Как добавить родительский компонент в дочерний компонент? - Angular 2 дочерний компонент относится к родительскому компоненту Таким образом, вы можете гарантировать, что thefunction() вызывается только в том случае, если parent является body.component.

constructor(@Host() bodyComp: BodyComponent) {

В противном случае использование @Output() предпочтительнее для связи от дочернего к родительскому.

Ответ 3

Ниже для меня работает последний

Angular4

class ChildComponent {
  @Output() myEvent = new EventEmitter<string>();

  callParent() {
    this.myEvent.emit('eventDesc');
  }
}

В шаблоне ParentTemplate

<child-component (myEvent)="anyParentMehtod($event)"