Czy istnieje sposób na złapanie lokalnych wydarzeń emitowanych z komponentu modalnego (utworzonego z modalcontroller) bez odwołania, a nie musi używać globalnego Events lub usługi?

Kątowy sposób do zrobienia tego jest użycie listen z Renderer, ale nie widzę, jak uzyskać właściwe odniesienie do instancji komponentu w tym przypadku.

mycomponent.ts

...
export class MyComponent {
  @Output() myAwesomeEvent = new EventEmitter<string>();

  fireEvent() {
    this.myAwesomeEvent.emit('payload');
  }
}

Parent.ts

...
const modal = this.modalCtrl.create(MyComponent);
// how do I catch 'myAwesomeEvent' emitted from within MyComponent?
...
3
JoshuaDavid 15 luty 2017, 23:30

2 odpowiedzi

Najlepsza odpowiedź

Uzyskaj dostęp do nieruchomości instance w modalnym.

const modal = this.modalCtrl.create(MyComponent);
modal.didEnter.subscribe(() => {
    modal.instance.myAwesomeEvent.subscribe(....)
});

Wersja jonowa 3:

this.modalCtrl.create(MyComponent).present().then((result) =>{
    modal.instance.myAwesomeEvent.subscribe(....)
});
1
misha130 31 marzec 2019, 13:49

jonowa wersja 4 Może to być obejście? (Wydaje się, że działa dobrze w mojej aplikacji)

let eventEmitter= new EventEmitter();
eventEmitter.subscribe(res=>{
  console.log("emitterResult", res)
});

  const modal = await this.modalCtrl.create({
  component: MyComponent,
  componentProps: {
    clickFavorite: eventEmitter
  }
});

MyComponent:

export class MyComponent{    
@Output() clickFavorite= new EventEmitter<any>();

  favorite(evt){
      this.clickFavorite.emit("OK");}
  }
}
3
Martin 25 wrzesień 2019, 10:19