2016-05-03 17 views
7
Parent

modello:Come bolla angular2 evento personalizzato

<ul> 
    <tree-item [model]="tree" (addChild)="addChild($event)"></tree-item> 
</ul> 

Albero modello di elemento:

<li> 
    <div>{{model.name}} 
    <span [hidden]="!isFolder" (click)="addChild.emit(model)">Add Child</span> 
    </div> 
    <ul *ngFor="let m of model.children"> 
    <tree-item [model]="m"></tree-item> 
    </ul> 
</li> 

Ad esempio precedente, genitore riceve evento addChild solo dall'albero-elemento principale (figlio diretto) . È possibile presentare un evento addChild da qualsiasi albero-elemento? Sto usando angular 2.0.0-rc.0.

risposta

11

Gli eventi da EventEmitter non supportano il bubbling.

È possibile utilizzare element.dispatchEvent() per attivare un evento DOM che bolle o utilizzare un servizio condiviso come un bus di messaggi.

Vedi anche https://angular.io/docs/ts/latest/cookbook/component-communication.html

+0

Potrebbe essere usato un oggetto JavaScript CustomEvent? C'è una truffa per i professionisti di questo? Non è davvero coperto nella documentazione Angular. Forse perché sconsigliano di accedere al DOM direttamente – Ryan

+0

Questo è ciò che 'element.dispatchEvent()' è per. Angular suggerisce di utilizzare un servizio condiviso invece di eventi DOM. Un evento DOM può causare il rilevamento delle modifiche da eseguire per l'intera app, mentre un servizio con un osservabile causa solo il rilevamento delle modifiche da eseguire per il componente che si abbona all'osservabile. –

+0

@ GünterZöchbauer supponiamo di avere un'applicazione in cui il clic destro su ancore di una specifica classe/selettore dovrebbe visualizzare un menu di scelta rapida personalizzato. In jQuery, avremmo qualcosa di simile a '$ ('body'). On ('contextmenu', 'a.context', myFunction)' Preferisco legare l'evento al corpo invece che a un tag. Stai dicendo che questo approccio non è possibile in Angular2? – igasparetto

Problemi correlati