Utilisation d'AngularJS si j'ai défini une valeur de zone de texte de saisie simple à quelque chose comme "bob" ci-dessous. La valeur ne s'affiche pas si l' ng-model
attribut est ajouté.
<input type="text"
id="rootFolder"
ng-model="rootFolders"
disabled="disabled"
value="Bob"
size="40"/>
Quelqu'un sait qu'il existe un moyen simple de contourner cette entrée par défaut et de conserver le ng-model
? J'ai essayé d'utiliser un ng-bind
avec la valeur par défaut mais cela ne semble pas fonctionner non plus.
javascript
html
angularjs
Bonjour le monde
la source
la source
Vojta a décrit la "voie angulaire", mais si vous avez vraiment besoin de faire ce travail, @urbanek a récemment publié une solution de contournement en utilisant ng-init:
https://groups.google.com/d/msg/angular/Hn3eztNHFXw/wk3HyOl9fhcJ
la source
value="Bob"
partie dans la balise d'entrée.Remplacer la directive d'entrée semble faire l'affaire. J'ai apporté quelques modifications mineures au code de Dan Hunsaker :
$parse().assign()
sur des champs sans attributs ngModel.assign()
ordre des paramètres de fonction.la source
La voie angulaire
La manière angulaire correcte de le faire est d'écrire une application d'une seule page, AJAX dans le modèle de formulaire, puis de la remplir dynamiquement à partir du modèle. Le modèle n'est pas renseigné par défaut à partir du formulaire car le modèle est la seule source de vérité. Au lieu de cela, Angular ira dans l'autre sens et essaiera de remplir le formulaire à partir du modèle.
Si toutefois vous n'avez pas le temps de recommencer à zéro
Si vous avez une application écrite, cela peut impliquer des changements architecturaux assez lourds. Si vous essayez d'utiliser Angular pour améliorer un formulaire existant, plutôt que de créer une application entière d'une seule page à partir de zéro, vous pouvez extraire la valeur du formulaire et la stocker dans la portée au moment du lien à l'aide d'une directive. Angular liera ensuite la valeur de l'étendue au formulaire et la gardera synchronisée.
Utilisation d'une directive
Vous pouvez utiliser une directive relativement simple pour extraire la valeur du formulaire et la charger dans la portée actuelle. Ici, j'ai défini une directive initFromForm.
Vous pouvez voir que j'ai défini quelques solutions de rechange pour obtenir un nom de modèle. Vous pouvez utiliser cette directive en conjonction avec la directive ngModel, ou vous lier à autre chose que $ scope si vous préférez.
Utilisez-le comme ceci:
Notez que cela fonctionnera également avec les zones de texte et sélectionnez des listes déroulantes.
la source
input="text"
. Si vous en avez un,number
il lancera Model n'est pas de typenumber
docs.angularjs.org/error/ngModel/numfmt?p0=333if (attrs.type === "number") val = parseInt(val);
Mise à jour: Ma réponse initiale impliquait que le contrôleur contienne du code compatible DOM, ce qui rompt les conventions angulaires en faveur du HTML. @dmackerman a mentionné des directives dans un commentaire sur ma réponse, et cela m'a complètement manqué jusqu'à présent. Avec cette entrée, voici la bonne façon de le faire sans enfreindre les conventions angulaires ou HTML:
Il y a aussi un moyen d'obtenir les deux - saisir la valeur de l'élément et l'utiliser pour mettre à jour le modèle dans une directive:
puis:
Vous pouvez bien sûr modifier la directive ci-dessus pour en faire plus avec l'
value
attribut avant de définir le modèle sur sa valeur, notamment en utilisant$parse(attrs.value, scope)
pour traiter l'value
attribut comme une expression angulaire (bien que j'utiliserais probablement un attribut [personnalisé] différent pour cela, personnellement, les attributs HTML standard sont donc systématiquement traités comme des constantes).En outre, une question similaire est posée sur Rendre les modèles de données disponibles pour le modèle ng qui peut également être intéressant.
la source
Si vous utilisez la directive AngularJs ngModel, n'oubliez pas que la valeur de l'
value
attribut ne se lie pas au champ ngModel. Vous devez l' initier par vous-même et la meilleure façon de le faire est dela source
Ceci est une légère modification des réponses précédentes ...
Il n'y a pas besoin de $ parse
la source
Salut, vous pouvez essayer les méthodes ci-dessous avec initialiser le modèle.
Ici, vous pouvez initialiser le modèle ng de la zone de texte dans les deux sens
- Avec utilisation de ng-init
- Avec utilisation de $ scope dans js
la source
Le problème est que vous devez définir le modèle ng sur l'élément parent à l'endroit où vous souhaitez définir la valeur / valeur ng. Comme mentionné par Angular:
Par exemple: Ceci est un code exécuté:
Remarque: dans ce cas ci-dessus, j'ai déjà eu la réponse JSON au modèle ng et à la valeur, j'ajoute simplement une autre propriété à l'objet JS en tant que "MarketPeers". Ainsi, le modèle et la valeur peuvent dépendre selon les besoins, mais je pense que ce processus aidera, à avoir à la fois ng-modèle et valeur mais ne pas les avoir sur le même élément.
la source
J'ai eu un problème similaire. Je n'ai pas pu utiliser
value="something"
pour afficher et modifier. J'ai dû utiliser la commande ci-dessous à l'intérieur de mon<input>
long avec le modèle ng en cours de déclaration.Où j'ai la liste des données dans l'objet
userDataToPass
et l'élément que je dois afficher et modifier estpinCode
.Pour la même chose, je me suis référé à cette vidéo YouTube
la source