AngularJS:如何在没有控制器功能的情况下“正确”处理空白/未触摸的表单数据以进行初始化

时间:2015-11-20 00:00:29

标签: jquery angularjs forms

我正在尝试确保所有表单字段都出现在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/

这是页面启动时的样子:

What it looks like when the page boots

用户的值未定义。

没有用户输入,按下按钮会触发JQuery .trigger('更改')然后根据需要看到空字段:

What it looks like after button press

总之:让Angular处理所有未触摸/触发的字段以便组装完全填充的用户对象的正确方法是什么?

提前致谢。

0 个答案:

没有答案