在 Angular 中执行操作后重置表单控件
Resetting form controls after action in Angular
this 需要一些帮助。在调用添加控件后,我试图让 Angular 重置我的输入框的值。在下拉 select 个框时,这很重要。在将选项推送到集合后,我希望能够清除用户 select 编辑的内容。
我似乎也对 user.fName
更新我之前添加到 users
数组的任何内容有疑问,但这可能与上述内容有关。
你还能看到我在 ng-show
上做错了什么吗?
html
<div ng-controller="UserController" name="form">
<div ng-show="form.fName.$touched">Hello {{ user.fName }}</div>
<input type="text" name="fName" ng-model="user.fName">
<a ng-click="addUser(user)">Add</a>
<br>
<div ng-repeat="user in users">{{ user }}</div>
</div>
javascript
function UserController($scope) {
//$scope.user = {
// fName: "Joe",
// lName: "Doe"
//};
$scope.users = [];
$scope.addUser = function (user) {
if($scope.users.indexOf(user) === -1){
$scope.users.push(user);
} else {
// trigger error/notification message
console.log(user, ' already added');
}
user = {}; //clear user
};
}
ngModel
将尝试绑定到 属性 通过评估当前范围内的表达式给出的值。如果 属性 在此作用域中尚不存在,它将被隐式创建并添加到作用域中。
您目前没有在点击操作中使用范围 属性,而是使用作为参数传递的副本。在您的 addUser
方法中将 user
更改为 $scope.user
注意:用于识别已添加用户的对象比较将不起作用,因为您总是创建永远不会匹配的新对象。将其更改为一些不同的比较方法,例如比较 fName 属性。
html
<div ng-controller="UserController" name="form">
<div ng-show="form.fName.$touched">Hello {{ user.fName }}</div>
<input type="text" name="fName" ng-model="user.fName">
<a ng-click="addUser()">Add</a>
<br>
<div ng-repeat="user in users">{{ user }}</div>
</div>
javascript
function UserController($scope) {
$scope.users = [];
$scope.addUser = function () {
if($scope.users.indexOf($scope.user) === -1){
$scope.users.push($scope.user);
} else {
// will never match as indexOf() will always return -1
console.log($scope.user, ' already added');
}
$scope.user = {}; //clear user
};
}
http://plnkr.co/edit/N5FXJdWRl42YrVwJsUuR?p=preview
至于你的 ng-show 问题:$touched 是在 AngularJS 1.3 中引入的,你在你的 Plunker 代码中引用了 AngularJS 1.2.x。
this 需要一些帮助。在调用添加控件后,我试图让 Angular 重置我的输入框的值。在下拉 select 个框时,这很重要。在将选项推送到集合后,我希望能够清除用户 select 编辑的内容。
我似乎也对 user.fName
更新我之前添加到 users
数组的任何内容有疑问,但这可能与上述内容有关。
你还能看到我在 ng-show
上做错了什么吗?
html
<div ng-controller="UserController" name="form">
<div ng-show="form.fName.$touched">Hello {{ user.fName }}</div>
<input type="text" name="fName" ng-model="user.fName">
<a ng-click="addUser(user)">Add</a>
<br>
<div ng-repeat="user in users">{{ user }}</div>
</div>
javascript
function UserController($scope) {
//$scope.user = {
// fName: "Joe",
// lName: "Doe"
//};
$scope.users = [];
$scope.addUser = function (user) {
if($scope.users.indexOf(user) === -1){
$scope.users.push(user);
} else {
// trigger error/notification message
console.log(user, ' already added');
}
user = {}; //clear user
};
}
ngModel
将尝试绑定到 属性 通过评估当前范围内的表达式给出的值。如果 属性 在此作用域中尚不存在,它将被隐式创建并添加到作用域中。
您目前没有在点击操作中使用范围 属性,而是使用作为参数传递的副本。在您的 addUser
方法中将 user
更改为 $scope.user
注意:用于识别已添加用户的对象比较将不起作用,因为您总是创建永远不会匹配的新对象。将其更改为一些不同的比较方法,例如比较 fName 属性。
html
<div ng-controller="UserController" name="form">
<div ng-show="form.fName.$touched">Hello {{ user.fName }}</div>
<input type="text" name="fName" ng-model="user.fName">
<a ng-click="addUser()">Add</a>
<br>
<div ng-repeat="user in users">{{ user }}</div>
</div>
javascript
function UserController($scope) {
$scope.users = [];
$scope.addUser = function () {
if($scope.users.indexOf($scope.user) === -1){
$scope.users.push($scope.user);
} else {
// will never match as indexOf() will always return -1
console.log($scope.user, ' already added');
}
$scope.user = {}; //clear user
};
}
http://plnkr.co/edit/N5FXJdWRl42YrVwJsUuR?p=preview
至于你的 ng-show 问题:$touched 是在 AngularJS 1.3 中引入的,你在你的 Plunker 代码中引用了 AngularJS 1.2.x。