我正在尝试确保所有表单字段都出现在Angular生成的对象中。默认行为是为表单创建的对象只包含以下元素:
我不想初始化表单,以便提交按钮使所有输入都在对象中。
我想出了一种方法来使用JQuery来触发输入元素来获得所需的行为。但这是一个黑客,可能不是“适当”的方式:
<!DOCTYPE html>
<html lang="en">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
<script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js"></script>
<body>
<div ng-app="myApp" ng-controller="formCtrl">
<form novalidate>
First Name:
<br>
<input type="text" ng-model="user.firstName">
<br> Last Name:
<br>
<input type="text" ng-model="user.lastName">
<br>
<br>
<button ng-click="setUserFromForm()">Set User</button>
</form>
<p>user = {{user}}</p>
</div>
<script>
var app = angular.module('myApp', []);
app.controller('formCtrl', function($scope) {
$scope.setUserFromForm = function() {
var inputElements = $('input[ng-model]');
inputElements.trigger('change'); // <-- This forces the change events on the input elements to kick off angular
};
});
</script>
</body>
</html>
JSFiddle at:https://jsfiddle.net/malford/cn6m09sc/
这是页面启动时的样子:
用户的值未定义。
没有用户输入,按下按钮会触发JQuery .trigger('更改')然后根据需要看到空字段:
总之:让Angular处理所有未触摸/触发的字段以便组装完全填充的用户对象的正确方法是什么?
提前致谢。