2014-11-01 20 views
6

Dal ngTouch ngClick documentation:ngTouch ngClick non lo fa bolla

Un più potente sostituto per il default ngClick progettato per essere utilizzato su dispositivi touchscreen. La maggior parte dei browser mobili attendono circa 300ms dopo un tap-and-release prima di inviare l'evento click. Questa versione le gestisce immediatamente e quindi impedisce la propagazione del seguente evento click.

Questo crea un comportamento incoerente in quello su un computer, l'evento click continua a diffondersi/propagarsi, ma su cellulare, si interrompe. Ciò significa che tutte le direttive più elevate nella dom che ascoltano i clic dell'elemento non funzionano. Sembra un bug per me, ma non devo essere la prima persona a dover lavorare su questo.

Se si guarda alla ngTouch code, the problem stems from line 453

element.triggerHandler('click', [event]); 

Angular docs:

angular.element delegati al di angolare integrato sottoinsieme di jQuery, chiamato "jQuery lite" o "jqLite."

jqLite ha accesso a jQuery di triggerHandler, ma non trigger.

jQuery docs:

Il .triggerHandler() il metodo si comporta in modo simile a .trigger(), con le seguenti eccezioni:

  • Eventi attivati ​​con .triggerHandler() non bolla il DOM gerarchia; se non sono gestiti direttamente dall'elemento bersaglio, non fanno nulla.

Così la gente angolare bisogno di aggiungere trigger sostegno ai jqLite e cambiare quella linea ad trigger per farlo funzionare correttamente.

Nel frattempo, come posso aggirare questo? C'è un modo per usare ngClick all'interno di una direttiva personalizzata?


Bonus per ride: Comment from the ngTouch source code

// This is an ugly, terrible hack! 
// Yeah, tell me about it. 

risposta

2

ho sostituito la linea 453 con

element[0].dispatchEvent(new MouseEvent('click', event)); 

sta funzionando come previsto, per ora. Non sei sicuro della compatibilità del browser per new MouseEvent(), quindi sentiti libero di commentare se lo sei.

2

in aggiunta alla soluzione di cui sopra, ho anche dovuto aggiungere ng-click = "" a ciascuna delle mie ancore per farlo funzionare.

nota: avrei preferito scrivere questo come commento, ma StackOverflow non ritiene di aver guadagnato il diritto. scusa.

Problemi correlati