我有一个简单的形式:
<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>
我的控制器如下:
$scope.addToDo = function() {
if ($scope.toDoName !== "") {
$scope.toDos.push(createToDo($scope.toDoName));
}
}
我想要做的是在提交后清除文本输入,这样我只需清除模型值:
$scope.addToDo = function() {
if ($scope.toDoName !== "") {
$scope.toDos.push(createToDo($scope.toDoName));
$scope.toDoName = "";
}
}
除了现在,因为表单输入是“必需的”,我在表单输入周围得到一个红色边框。这是正确的行为,但不是我想要的在这种情况下......所以我想清除输入然后模糊输入元素。这导致我:
$scope.addToDo = function() {
if ($scope.toDoName !== "") {
$scope.toDos.push(createToDo($scope.toDoName));
$scope.toDoName = "";
$window.document.getElementById('todo-name').blur();
}
}
现在,我知道在Angular文档中对这样的控制器中的DOM进行修改是不受欢迎的 - 但是有更多的Angular方法吗?
答案 0 :(得分:31)
当您为表单命名时,它会自动添加到$scope
。
因此,如果您将表单名称更改为“addForm
”(因为我不认为add-from
是角度的有效名称,不确定原因),您将引用$scope.addForm
。
如果您使用角度1.1.1或更高版本,则$scope.addForm
上将使用$setPristine()
方法。应该递归地处理重置您的表单。或者如果您不想使用1.1.x版本,可以look at the source并模拟它。
答案 1 :(得分:2)
对于那些尚未切换到1.1.1的人,这里有一个指令,当$ scope属性发生变化时会模糊:
app.directive('blur', function () {
return function (scope, element, attrs) {
scope.$watch(attrs.blur, function () {
element[0].blur();
});
};
});
控制器现在必须在发生提交时更改属性。但至少我们没有在控制器中进行DOM操作,我们不必按ID查找元素:
function MainCtrl($scope) {
$scope.toDos = [];
$scope.submitToggle = true;
$scope.addToDo = function () {
if ($scope.toDoName !== "") {
$scope.toDos.push($scope.toDoName);
$scope.toDoName = "";
$scope.submitToggle = !$scope.submitToggle;
}
};
}
HTML:
<input type="text" data-ng-model="toDoName" name="todo-name" required
blur="submitToggle">
答案 2 :(得分:0)
我已将其设为如下代码所示。
HTML SECTION
<td ng-show="a">
<input type="text" ng-model="e.FirstName" />
</td>
控制器部分
e.FirstName ='';