/ / Setze den Wert in $ scope und verwende $ parsers - angularjs, angularjs-directive, angularjs-scope

Setzen Sie den Wert in $ scope und verwenden Sie $ parser - angularjs, angularjs-directive, angularjs-scope

Ich habe ein Feld in $ scope (ich bin neu in angularjs Terminologie), das in HTML verlinkt ist:

<input type="text" ng-model="phone" format-phone/>

Format-phone ist eine benutzerdefinierte Anweisung, die einen Parser für einen Ansichtswert hinzufügt:

.directive("formatPhone", () => ({
require: "?ngModel",
link: (scope, elem, attrs, ctrl) => {
if (!ctrl) return;
ctrl.$parsers.unshift(viewValue => {
var phone = viewValue.substring(0, 12).replace(/* some custom replace */);
elem.val(phone.replace(/* another custom replace */)));
return phone;
});
}
}))

Das funktioniert perfekt und ändert das Modell und zeigt die Werte wie gewünscht an. Ich möchte dem Modell im Controller-Code einen Standardwert hinzufügen, also habe ich diese Zeile hinzugefügt:

$scope.phone = "1112223344";

Dieser Wert wird jedoch nicht von Parser verarbeitetDirektive und bleibt roh, bis ich es zum ersten Mal bearbeite. Kann ich den Parser auf Ansichts- / Modellwert vom Controller explizit aufrufen, ohne eine andere Initialisierungsanweisung zu schreiben? Oder kann ich View-Wert festlegen, der automatisch von Parser behandelt wird?

UPD: Dank @potatopeelings habe ich es besser gemacht, aber diese Lösung sieht wirklich schlecht aus. Habe ich eine Alternative zum Aufruf von Formatierer aus Parser?

ctrl.$formatters.unshift(modelValue => {
modelValue; // 123456
return modelValue.replace(...); // View value is now (123)45-6
});
ctrl.$parsers.unshift(viewValue => {
var phone = viewValue.replace(...); // (123)456 -> 123456
elem.val(ctrl.$formatters[0](phone)); // Element value is now (123)45-6
return phone; // Model value is now 123456
});

Antworten:

0 für die Antwort № 1

Parser sollen Ansichtswerte in Modellwerte umwandeln, und Formatierer werden zum Konvertieren von Modellwerten in Werte verwendet.

Sie müssen einen Formatierer einfügen, der Ihren (initialisierten) Modellwert in den von Ihnen benötigten Ansichtswert konvertiert.