提交后的Angular - clear表单输入

lee*_*ell 23 angularjs

我有一个简单的形式:

<form name="add-form" data-ng-submit="addToDo()">
    <label for="todo-name">Add a new item:</label>
    <input type="text" data-ng-model="toDoName" id="todo-name" name="todo-name" required>
    <button type="submit">Add</button>
</form>
Run Code Online (Sandbox Code Playgroud)

我的控制器如下:

$scope.addToDo = function() {
    if ($scope.toDoName !== "") {
        $scope.toDos.push(createToDo($scope.toDoName));
    }
}
Run Code Online (Sandbox Code Playgroud)

我想做的是在提交后清除文本输入,所以我只需清除模型值:

$scope.addToDo = function() {
    if ($scope.toDoName !== "") {
        $scope.toDos.push(createToDo($scope.toDoName));
        $scope.toDoName = "";
    }
}
Run Code Online (Sandbox Code Playgroud)

除了现在,因为表单输入是"必需的",我在表单输入周围得到一个红色边框.这是正确的行为,但不是我想要的在这种情况下......所以我想清除输入然后模糊输入元素.这导致我:

$scope.addToDo = function() {
    if ($scope.toDoName !== "") {
        $scope.toDos.push(createToDo($scope.toDoName));
        $scope.toDoName = "";
        $window.document.getElementById('todo-name').blur();
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,我知道在Angular文档中对这样的控制器中的DOM进行修改是不受欢迎的 - 但是有更多的Angular方法吗?

Sha*_*.io 31

当您为表单命名时,它会自动添加到表单中$scope.

因此,如果您将表单名称更改为" addForm"(因为我认为add-from它不是角度的有效名称,不确定原因),您将引用$scope.addForm.

如果你使用角1.1.1或更高,你将有一个$setPristine()方法$scope.addForm.应该递归地处理重置您的表单.或者如果您不想使用1.1.x版本,可以查看源代码并模拟它.

  • 你怎么用$ setPristine? (21认同)
  • $ scope.form-name.$ model-property.$ setPristine()用于属性级别或$ scope.form-name.$ setPristine()用于表单级别(影响所有表单控件) (5认同)
  • 谢谢!虽然我仍然需要清除模型,但$ setPristine()可以很好地处理模糊.'add-form'似乎有效,我可以使用$ scope ['add-form']而不是点符号来访问它. (2认同)
  • 是的,清除模型总是必须的,因为$ setPristine不知道你的模型.谢谢你让我知道这个名字!错过了完全以为我不应该有:) (2认同)