Ich versuche, mit unterschiedlichen Verhalten von ngModel
in verschiedenen Browsern umzugehen.ngModel - Wie man mit seinem unterschiedlichen Verhalten in verschiedenen Browsern umgehen kann?
Meine Anweisung Wrapps jqueryUI Autocomplete und auf seinem select
Ereignis ruft es ngModel.$setViewValue(selectedItem.id)
. Bei der automatischen Vervollständigung kann der Benutzer das Element per Mausklick oder durch Drücken der Taste enter
auf der Tastatur auswählen.
Wenn genannte Artikel ist:
{
"name": "Apple",
"id": "1000"
}
Ich erwarte, dass es nach der Wahl, die ngModel Wert wird der ausgewählte Artikel id
-1000
.
In Chrome funktioniert es OK - es setzt
$viewValue
und$modelValue
richtig ($modelValue=1000
).In Firefox gibt es Modell wie in Chrome (
$modelValue=1000
), aber wenn ich woanders klicken - Unschärfe macht (dann Browser feuert wahrscheinlichchange
Ereignis), Modelländerungen und es wird gleich wie sichtbarer Eingabewert ($modelValue='Apple'
).In IE 11 setzt das Modell nur dann korrekt, wenn ich das Element mit einem Mausklick auswähle. Wenn ich es durch Drücken
enter
auswählen, wird das Modell sichtbar Eingangswert ($modelValue='Apple'
)
Hier ist plunkr: http://plnkr.co/edit/o2Jkgprf8EakGqnpu22Y?p=preview
Ich möchte das gleiche Verhalten in jedem Browser erreichen. Wie geht man mit diesen Problemen um?
Ich denke, Sie sind viel besser, zwei verschiedene Modelle zu verwenden, eine, die den aufgelösten Async-Wert enthält (wahrscheinlich privat), und eine, die der Benutzer verwendet, um die Abfrage (öffentlich) einzugeben. So wie es steht, wenn man einen vollständigen falschen Namen eingibt (einen, der nicht in der Liste der Früchte ist), dann ist dies der Modellwert. Was wahrscheinlich nicht wirklich hilfreich ist, wenn Sie erwarten, dass es eine ID ist. – Yoshi
@Yoshi, Das, was Sie erwähnt haben, ist nur eine Validierungsverbesserung - Benutzer wird nicht in der Lage sein, etwas anderes als ID einzugeben, aber es löst das Problem nicht. (Oder ich weiß nicht, wie ich es richtig umsetzen soll). Mit Ihren Hinweisen wäre es in etwa so: http://plnkr.co/edit/7nCAEhIXX2wGNR18eRqk. '$ modelValue = null 'für falsche Namen, aber in Firefox Parser-Funktion wird immer noch wieder auf Unschärfe ausgeführt, so verliere ich meinen ausgewählten Wert. – akn
Wenn es nur die Ereignisse sind, können Sie versuchen, ['ngModelOptions.updateOn'] (https://docs.angularjs.org/api/ng/directive/ngModelOptions) zu verwenden. – Yoshi