У меня есть приложение, в котором есть компонент загрузки, в котором я могу загрузить файл. Он встроен в body.component
.
При загрузке он должен использовать функцию (например BodyComponent.thefunction()
) родительского компонента (выполнить вызов для обновления данных): но только если это родительский компонент body.component
. Загрузку также можно использовать в другом месте с другим поведением.
Что-то вроде parent(this).thefunction()
, как это сделать?
angular2/core
. Журнал консоли показывает проблему с angular2-polyfills@Ouput
вместо@Output
. Может быть проблема ... Я обновил свой ответ.uploadComplete is not defined
заметку, что я просто скопировал их в качестве примеров. У родителя тоже есть someMethod, но с ним уже есть проблемаuploadComplete
. Родительский компонент действительно использует (загруженную) привязку к дочернему узлу, и у него уже есть дочерний элемент в качестве директивы.Ниже работает у меня в последнем
Угловой5
class ChildComponent { @Output() myEvent = new EventEmitter<string>(); callParent() { this.myEvent.emit('eventDesc'); } }
В
ParentTemplate
шаблоне<child-component (myEvent)="anyParentMehtod($event)"
источник
Решение без вовлеченных событий.
Предположим, что у меня есть
ChildComponent
и из него я хочу вызвать метод,myMethod()
которому принадлежитParentComponent
(сохраняя исходный родительский контекст).Класс родительского компонента:
Родительский шаблон:
Дочерний шаблон
источник
this.myMethod.bind(this)
его возвращают. (Возможно, вместо этого я делаю что-то в корне неправильно.)Вы можете вставить родительский компонент в дочерний компонент.
Дополнительные сведения см. В разделе
- Как вставить родительский компонент в дочерний компонент?
- Дочерний компонент Angular 2 относится к родительскому компоненту. Таким образом, вы можете гарантировать, что он
thefunction()
будет вызываться только тогда, когда родителем являетсяbody.component
.constructor(@Host() bodyComp: BodyComponent) {
В противном случае использование
@Output()
предпочтительнее для общения от ребенка к родителю.источник
constructor(@Host() bodyComp: BodyComponent)
.. возможно, недавно его поменяли. Отлично работает, спасибо!