如何在angularjs 1.3中将表单中的特定字段设置为dirty
How to set a particular field in a form to dirty in angularjs 1.3
我想将特定表单的字段设置为脏字段,就像手动更改该值一样。我已经使用了SO线程Angular.js,通过编程将表单字段设置为dirty,但运气不好。
这是我这期的样本复制品。Plunk
<html ng-app="sampleApp">
<head>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.0- rc.4/angular.min.js"></script>
<style type="text/css">
input.ng-invalid {
border: 1px solid red;
}
input.ng-valid {
border: 1px solid green;
}
input.ng-pristine {
border-color: #FFFF00;
}
</style>
<script type="text/javascript">
var sampleApp = angular.module("sampleApp", []);
sampleApp.controller('sampleCtrl', ['$scope', '$http', '$timeout',
function($scope, $http, $timeout) {
$scope.userData = {
username: "",
};
$timeout(function() {
$scope.userData.username = '$#deepak';
}, 5000);
}
]);
sampleApp.directive('myUsername', [
function() {
// Runs during compile
return {
require: 'ngModel', // Array = multiple requires, ? = optional, ^ = check parent
link: function($scope, iElm, iAttrs, controller) {
controller.$parsers.unshift(function(value) {
//allow only alphanumeric characters
var reg = /^'w+$/;
var isValidUsername = reg.test(value);
controller.$setValidity('username', isValidUsername);
return isValidUsername ? value : undefined;
});
controller.$formatters.unshift(function(value) {
var reg = /^'w+$/;
var isValidUsername = reg.test(value);
controller.$setValidity('username', isValidUsername);
$scop e.registrationForm.username.$setViewValue($scope.registrationForm.username.$viewValue);
return value;
})
}
};
}
]);
</script>
</head>
<body ng-controller="sampleCtrl">
<div ng-show="bShowStatus">
{{message}}
<ul ng-repeat="err in errors">
{{err}}
</ul>
</div>
<form name="registrationForm" ng-submit="submitForm()" novalidate>
UserName
<br>
<input type="text" name="username" ng-model="userData.username" ng-model-options="{updateOn: 'blur'}" my-username>
<span ng-show="registrationForm.username.$dirty && registrationForm.username.$error.username">
Invalid Username.
</span>
<br>
<br>
<input type="submit" value="Submit">
</form>
</body>
</html>
在示例中,我在5秒钟后修改用户名(仅用于示例)。同时,我想将字段设置为dirty,并启动验证并显示错误消息。
请帮忙。
Deepak
这是带有解决方案的plnkrhttp://plnkr.co/edit/69Beli?p=preview.与其直接更新$scope.userData.username并绕过"模型到视图"的解析器管道,不如使用jQuery更新输入字段并触发"更改"事件,并使用Angular提供的"视图到模型"管道。
$timeout(function(){
jQuery("[name=username]").val('$#deepak');
jQuery("[name=username]").trigger('change');
}, 5000);
另一个plnkrhttp://plnkr.co/edit/Zct92r实现了$render。这是针对"模型到视图"管道,在$parser之后调用$render,并根据错误设置样式。
controller.$render = function() {
console.log('in render');
iAttrs.$set('value', controller.$viewValue);
if (controller.$invalid && controller.$viewValue.length !== 0) {
iElm.css("border", "1px solid red");
} else if (controller.$viewValue.length === 0) {
iElm.css("border", "1px solid gold");
} else {
iElm.css("border", "1px solid green");
}
};
这两种解决方案都感觉像是破解,$render感觉更像。无论在$render中设置了什么,都必须在$parser中进行补偿并撤消。
好吧,使用线程中讨论的$dirty标志(Angular.js通过编程将表单字段设置为dirty)对我来说很有效:
$timeout(function(){
$scope.userData.username = '$#deepak';
$scope.registrationForm.username.$dirty = true;
}, 5000);
请参阅此处的工作plunker:http://plnkr.co/edit/ZvX62jJsklPLyw7Q4nlT?p=preview
相关文章:
- 如何将Date字段设置为等于另一个Date+Int值,该值表示月份值
- Sencha触摸,字段设置为Change Listener
- 将字段设置为有条件地使用所需的字段验证器
- crm 2011 javascript将日期字段设置为null
- 如何在自定义指令中将字段设置为$dirty
- javascript函数将上传文件字段设置为deafult
- 根据角度中的另一个字段设置输入字段的默认值
- Yii2 输入字段设置禁用取决于其他字段
- JavaScript for HTML5 必填字段设置为在 Safari 中工作
- 在 podio 中将计算日期字段设置为 null(因此使用 javascript)
- MongoDB:确保只有一个文档可以将字段设置为 true
- HTML 输入字段设置范围
- 如何使用 eval() 为作为参数提供的字段设置值
- j查询如何将值从输入字段设置为其他元素数据属性
- 使用具有金钱掩码的字段设置动态最大值
- 将输入字段设置为包含 window.location.href
- 根据下拉选择将输入字段设置为必填字段
- 从输入字段设置变量
- 从html输入字段设置javascript变量
- 如何在angularjs 1.3中将表单中的特定字段设置为dirty