L'angle moyen
Le bon Angulaire de la façon de le faire est d'écrire une page unique application, AJAX dans le modèle de formulaire, puis de le remplir de façon dynamique à partir du modèle. Le modèle n'est pas rempli à partir de la forme par défaut, parce que le modèle est la source unique de la vérité. Au lieu de cela Angulaire va aller de l'autre et essayer de remplir le formulaire à partir du modèle.
Si toutefois, vous n'avez pas le temps de recommencer à partir de zéro
Si vous avez une application écrite, cela peut impliquer quelques-uns assez lourdes modifications architecturales. Si vous essayez d'utiliser Angulaire pour améliorer un formulaire existant, plutôt que de construire toute une page unique application à partir de zéro, vous pouvez tirer la valeur de la forme et de la stocker dans le champ d'application au moment de la liaison à l'aide d'une directive. Angulaire va alors lier la valeur dans le champ d'application de retourner au formulaire et de le synchroniser.
À l'aide d'une directive
Vous pouvez utiliser un moyen relativement simple de la directive de tirer la valeur de la forme et de le charger dans le champ d'application actuel. Ici, j'ai défini un initFromForm directive.
var myApp = angular.module("myApp", ['initFromForm']);
angular.module('initFromForm', [])
.directive("initFromForm", function ($parse) {
return {
link: function (scope, element, attrs) {
var attr = attrs.initFromForm || attrs.ngModel || element.attrs('name'),
val = attrs.value;
$parse(attr).assign(scope, val)
}
};
});
Vous pouvez le voir, j'ai défini un couple de base pour obtenir un nom de modèle. Vous pouvez utiliser cette directive, conjointement avec la ngModel directive, ou se lier à quelque chose d'autre que $portée si vous préférez.
L'utiliser comme ceci:
<input name="test" ng-model="toaster.test" value="hello" init-from-form />
{{toaster.test}}
Remarque cela permettra également de travailler avec ces zones de texte, puis sélectionnez listes déroulantes.
<textarea name="test" ng-model="toaster.test" init-from-form>hello</textarea>
{{toaster.test}}