Verwenden von AngularJS, wenn ich einen einfachen Eingabetextfeldwert auf "bob" unten setze. Der Wert wird nicht angezeigt, wenn das ng-model
Attribut hinzugefügt wird.
<input type="text"
id="rootFolder"
ng-model="rootFolders"
disabled="disabled"
value="Bob"
size="40"/>
Kennt jemand eine einfache Lösung, um diese Eingabe auf etwas zu setzen und die ng-model
? Ich habe versucht, a ng-bind
mit dem Standardwert zu verwenden, aber das scheint auch nicht zu funktionieren.
javascript
html
angularjs
Hallo Welt
quelle
quelle
Vojta hat den "Angular Way" beschrieben, aber wenn Sie diese Funktion wirklich benötigen, hat @urbanek kürzlich eine Problemumgehung mit ng-init veröffentlicht:
https://groups.google.com/d/msg/angular/Hn3eztNHFXw/wk3HyOl9fhcJ
quelle
value="Bob"
Teil des Eingabe-Tags benötigen .Das Überschreiben der Eingaberichtlinie scheint die Aufgabe zu erfüllen. Ich habe einige kleinere Änderungen am Code von Dan Hunsaker vorgenommen :
$parse().assign()
Felder ohne ngModel-Attribute zu verwenden.assign()
Die Reihenfolge der Funktionsparameter wurde korrigiert.quelle
Der eckige Weg
Die richtige Methode für Angular besteht darin, eine einzelne Seiten-App, AJAX, in die Formularvorlage zu schreiben und sie dann dynamisch aus dem Modell zu füllen. Das Modell wird standardmäßig nicht aus dem Formular ausgefüllt, da das Modell die einzige Quelle der Wahrheit ist. Stattdessen geht Angular in die andere Richtung und versucht, das Formular aus dem Modell zu füllen.
Wenn Sie jedoch keine Zeit haben, von vorne zu beginnen
Wenn Sie eine App geschrieben haben, kann dies zu erheblichen architektonischen Änderungen führen. Wenn Sie versuchen, Angular zu verwenden, um ein vorhandenes Formular zu verbessern, anstatt eine einzelne App für eine einzelne Seite von Grund auf neu zu erstellen, können Sie den Wert aus dem Formular abrufen und mithilfe einer Direktive zum Zeitpunkt der Verknüpfung im Bereich speichern. Angular bindet dann den Wert im Bereich wieder an das Formular und hält ihn synchron.
Verwendung einer Direktive
Sie können eine relativ einfache Anweisung verwenden, um den Wert aus dem Formular abzurufen und in den aktuellen Bereich zu laden. Hier habe ich eine initFromForm-Direktive definiert.
Sie können sehen, dass ich einige Fallbacks definiert habe, um einen Modellnamen zu erhalten. Sie können diese Direktive in Verbindung mit der ngModel-Direktive verwenden oder an etwas anderes als $ scope binden, wenn Sie dies bevorzugen.
Verwenden Sie es so:
Beachten Sie, dass dies auch mit Textbereichen funktioniert, und wählen Sie Dropdowns aus.
quelle
input="text"
. Wenn Sie eine habennumber
, wird es werfen Modell ist nicht vom Typnumber
docs.angularjs.org/error/ngModel/numfmt?p0=333if (attrs.type === "number") val = parseInt(val);
Update: Meine ursprüngliche Antwort bestand darin, dass der Controller DOM-fähigen Code enthält, der gegen Angular-Konventionen zugunsten von HTML verstößt. @dmackerman erwähnte Anweisungen in einem Kommentar zu meiner Antwort, und das habe ich bis jetzt völlig verpasst. Mit diesem Eingang, hier ist der richtige Weg , dies zu tun , ohne Eckige zu brechen oder HTML - Konventionen:
Es gibt auch eine Möglichkeit, beides zu erhalten: Nehmen Sie den Wert des Elements und aktualisieren Sie damit das Modell in einer Direktive:
und dann:
Sie können die obige Direktive natürlich ändern, um mehr mit dem
value
Attribut zu tun , bevor Sie das Modell auf seinen Wert setzen, einschließlich der Verwendung$parse(attrs.value, scope)
, um dasvalue
Attribut als Winkelausdruck zu behandeln (obwohl ich persönlich wahrscheinlich ein anderes [benutzerdefiniertes] Attribut dafür verwenden würde). Daher werden die Standard-HTML-Attribute konsistent als Konstanten behandelt.Es gibt auch eine ähnliche Frage bei der Bereitstellung von Daten für das ng-Modell, die ebenfalls von Interesse sein können.
quelle
Wenn Sie die ngModel-Direktive von AngularJs verwenden, denken Sie daran, dass der Wert des
value
Attributs nicht an das ngModel-Feld gebunden ist. Sie müssen es selbst initiieren, und der beste Weg, dies zu tun, istquelle
Dies ist eine geringfügige Änderung der früheren Antworten ...
$ Parse ist nicht erforderlich
quelle
Hallo, Sie können unten Methoden mit Initialisierung des Modells versuchen.
Hier können Sie das ng-Modell des Textfelds auf zwei Arten initialisieren
- Bei Verwendung von ng-init
- Bei Verwendung von $ scope in js
quelle
Das Problem ist, dass Sie das ng-Modell auf das übergeordnete Element setzen müssen, auf das Sie den ng-Wert / Wert setzen möchten. Wie von Angular erwähnt:
Beispiel: Dies ist ein ausgeführter Code:
Hinweis: In diesem obigen Fall hatte ich bereits die JSON-Antwort auf das ng-Modell und den Wert. Ich füge dem JS-Objekt lediglich eine weitere Eigenschaft als "MarketPeers" hinzu. Das Modell und der Wert können also je nach Bedarf abhängen, aber ich denke, dieser Prozess wird helfen, sowohl ng-Modell als auch Wert zu haben, aber sie nicht auf demselben Element zu haben.
quelle
Ich hatte ein ähnliches Problem. Ich konnte nicht
value="something"
zum Anzeigen und Bearbeiten verwenden. Ich musste den folgenden Befehl in meinem<input>
zusammen mit dem deklarierten Modell verwenden.Wo ich die Liste der Daten im Objekt
userDataToPass
und das Element habe, das ich anzeigen und bearbeiten muss, istpinCode
.Aus dem gleichen Grund habe ich auf dieses YouTube-Video verwiesen
quelle