Sto cercando di gestire diversi comportamenti di ngModel
in diversi browser.ngModel - Come gestire il suo diverso comportamento nei diversi browser?
La mia direttiva esegue il completamento automatico di jqueryUI e sul relativo evento select
chiama ngModel.$setViewValue(selectedItem.id)
. Il completamento automatico consente all'utente di selezionare la voce con un clic del mouse o premendo enter
sulla tastiera.
Se voce suggerita è:
{
"name": "Apple",
"id": "1000"
}
mi aspetto dopo averlo selezionato, il valore ngModel verrà selezionato di voce id
-1000
.
In Chrome funziona bene - è imposta
$viewValue
e$modelValue
correttamente ($modelValue=1000
).In Firefox è imposta come modello in Chrome (
$modelValue=1000
), ma quando clicco da qualche altra parte - faccio sfocatura (allora il browser probabilmente sparachange
evento), modifiche del modello e diventa uguale valore di ingresso visibile ($modelValue='Apple'
).In IE 11 imposta il modello corretto solo quando seleziono l'elemento con il clic del mouse. Se seleziono premendo
enter
, il modello diventa valore di ingresso visibile ($modelValue='Apple'
)
Ecco plunkr: http://plnkr.co/edit/o2Jkgprf8EakGqnpu22Y?p=preview
vorrei raggiungere lo stesso comportamento in tutti i browser. Come affrontare questi problemi?
Penso che sia molto meglio utilizzare due modelli distinti, uno che contiene il valore asincrono risolto (probabilmente privato) e uno che l'utente utilizza per digitare la query (pubblica). Così com'è, quando si digita un nome falso completo (uno che non è nella lista dei frutti), questo sarà il valore del modello. Che probabilmente non è molto utile quando ti aspetti che sia un ID. – Yoshi
@Yoshi, che quello che hai menzionato è solo un miglioramento della validazione - l'utente non sarà in grado di digitare qualcosa di diverso da id, ma non risolve il problema. (O non so come implementarlo correttamente). Con i tuoi suggerimenti sarebbe qualcosa di simile: http://plnkr.co/edit/7nCAEhIXX2wGNR18eRqk. '$ modelValue = null' per i nomi falsi, ma nella funzione parser di firefox è ancora eseguito di nuovo su sfocatura, quindi perdo il mio valore selezionato. – akn
Se sono solo gli eventi, puoi provare a usare ['ngModelOptions.updateOn'] (https://docs.angularjs.org/api/ng/directive/ngModelOptions). – Yoshi