Mam aplikację, w której mam komponent do przesyłania, w którym mogę przesłać plik. Jest osadzony w body.component
.
Podczas przesyłania powinien używać funkcji (np. BodyComponent.thefunction()
) Komponentu nadrzędnego (wywołanie, aby zaktualizować dane): ale tylko wtedy, gdy nadrzędny jest konkretnie body.component
. Przesyłanie może być również używane w innym miejscu z innym zachowaniem.
Coś jak parent(this).thefunction()
, jak to zrobić?
angular2/core
. Dziennik konsoli pokazuje problem z angular2-polyfills@Ouput
zamiast@Output
. To może być problem ... Zaktualizowałem odpowiedź.uploadComplete is not defined
notatkę, którą właśnie skopiowałem jako przykłady. Rodzic również ma "someMethod", ale już ma z nim problemuploadComplete
. Komponent nadrzędny korzysta z (przesłanego) powiązania w węźle podrzędnym i ma już dziecko jako dyrektywę.Poniżej pracuje dla mnie w najnowszym
Angular5
class ChildComponent { @Output() myEvent = new EventEmitter<string>(); callParent() { this.myEvent.emit('eventDesc'); } }
W
ParentTemplate
szablonie<child-component (myEvent)="anyParentMehtod($event)"
źródło
Rozwiązanie bez wydarzeń.
Załóżmy, że mam
ChildComponent
iz tego, że chcę wywołać metodę, domyMethod()
której należyParentComponent
(zachowując oryginalny kontekst rodzica).Klasa komponentu nadrzędnego:
Szablon nadrzędny:
Szablon podrzędny
źródło
this.myMethod.bind(this)
wraca. (Prawdopodobnie zamiast tego robię coś zasadniczo złego.)Możesz wstrzyknąć komponent nadrzędny do komponentu podrzędnego.
Aby uzyskać więcej informacji, zobacz
- Jak wstrzyknąć komponent nadrzędny do komponentu podrzędnego?
- Komponent potomny Angular 2 odnosi się do komponentu nadrzędnego W ten sposób możesz upewnić się, że
thefunction()
jest wywoływany tylko wtedy, gdy rodzic jestbody.component
.constructor(@Host() bodyComp: BodyComponent) {
W przeciwnym razie
@Output()
preferowane jest używanie do komunikacji między dzieckiem a rodzicem.źródło
constructor(@Host() bodyComp: BodyComponent)
… może to ostatnio zostało zmienione. Działa świetnie, dzięki!