角度方式
正确的 Angular 方法是在表单模板中编写单页应用程序 AJAX,然后从模型中动态填充它。默认情况下,模型不会从表单中填充,因为模型是唯一的事实来源。相反,Angular 会采取另一种方式,并尝试从模型中填充表单。
但是,如果您没有时间从头开始
如果您编写了一个应用程序,这可能涉及一些相当大的架构更改。如果您尝试使用 Angular 来增强现有表单,而不是从头开始构建整个单页应用程序,您可以从表单中提取值并在链接时使用指令将其存储在范围中。然后,Angular 会将范围内的值绑定回表单并保持同步。
使用指令
您可以使用相对简单的指令从表单中提取值并将其加载到当前范围。在这里,我定义了一个 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);
}
};
});
你可以看到我已经定义了几个后备来获取模型名称。您可以将此指令与 ngModel 指令结合使用,或者如果您愿意,可以绑定到 $scope 以外的其他东西。
像这样使用它:
<input name="test" ng-model="toaster.test" value="hello" init-from-form />
{{toaster.test}}
请注意,这也适用于 textareas,并选择下拉菜单。
<textarea name="test" ng-model="toaster.test" init-from-form>hello</textarea>
{{toaster.test}}