El camino angular
La forma angular correcta de hacer esto es escribir una aplicación de una sola página, AJAX en la plantilla de formulario, y luego llenarla dinámicamente desde el modelo. El modelo no se rellena desde el formulario de forma predeterminada porque el modelo es la única fuente de verdad. En su lugar, Angular irá en sentido contrario e intentará completar el formulario desde el modelo.
Sin embargo, si no tiene tiempo para comenzar de nuevo desde cero
Si tiene una aplicación escrita, esto podría implicar algunos cambios arquitectónicos bastante fuertes. Si está intentando usar Angular para mejorar un formulario existente, en lugar de construir una aplicación de página única desde cero, puede extraer el valor del formulario y almacenarlo en el alcance en el momento del enlace utilizando una directiva. Angular luego vinculará el valor en el alcance de nuevo al formulario y lo mantendrá sincronizado.
Usando una directiva
Puede usar una directiva relativamente simple para extraer el valor del formulario y cargarlo en el ámbito actual. Aquí he definido una directiva initFromForm.
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;
if (attrs.type === "number") {val = parseInt(val)}
$parse(attr).assign(scope, val);
}
};
});
Puedes ver que he definido un par de alternativas para obtener un nombre de modelo. Puede usar esta directiva junto con la directiva ngModel, o unirse a algo que no sea $ scope si lo prefiere.
Úselo así:
<input name="test" ng-model="toaster.test" value="hello" init-from-form />
{{toaster.test}}
Tenga en cuenta que esto también funcionará con áreas de texto y menús desplegables seleccionados.
<textarea name="test" ng-model="toaster.test" init-from-form>hello</textarea>
{{toaster.test}}