Ma confrunt cu o problema de front-end in AngularJS.
Experienta mea fiind limitata in acest domeniu, as vrea sa fac o implementare cat mai corecta.
Asadar, avem urmatorul HTML in template: <a target="_blank" ng-href="{{myProperty.href}}" ng-click="myMethod($event)">Click me!</a>
Initial, myProperty.href are o valoare implicita. Cand utilizatorul face click, prin apelarea myMethod() se fac anumite procesari si request-uri asincrone, care in final vor popula cu o valoare noua myProperty.href.
Si acum problema: deoarece in myMethod() lucrurile se intampla asincron, cand utilizatorul da click pe link este directionat la adresa implicita. E adevarat ca la 1-2 secunde dupa click, in href apare noua adresa.
Cum pot face in asa fel incat evenimentul de click sa fie “disponibil” de-abia dupa ce s-a facut procesarea in myMethod()?
O varianta ar fi sa renunt la ng-href si sa folosesc $window.open, dar chiar si asa ar insemna sa folosesc $timeout pentru “a astepta” dupa request-urile respective (pentru ca metodele care sunt responsabile de procesare in interiorul myMethod nu returneaza un promise), fapt ce ar putea determina browser-ul sa blocheze deschiderea link-ului in tab nou.
la 1-2 secunde dupa click, in href apare noua adresa.
onclick=“return false” e primul rezultat de pe google, faci return false până când nu ai return de la .then.
sau a{ text-decoration: none; cursor: default; } până când nu primești răspuns.
Guys, multumesc pentru raspunsuri, dar asa cum spuneam in postarea initiala, nu stiu cand se termina request-urile din myMethod(). Fac parte dintr-un serviciu third-party in care nu pot face modificari, nu returneaza un promise, ci pur si simplu seteaza niste variabile in interiorul serviciului.
Am gasit eu cum se face.
Deschizi un nou tab cu $window.open, pastrezi o referinta la acel nou tab. Urmaresti variabila myProperty.href si cand se schimba redirectionezi acel nou tab catre noul url.