我想基于自定义布尔值设置表单元素的有效性。考虑下面的密码字段:
<input type="password" name="password" ng-model="user.password" required>
<input type="password" name="passwordRepeat" ng-model="user.passwordRepeat" required>
如果重复的密码与原始密码匹配,我想标记第二个输入字段有效。类似的东西:
<input type="password" name="passwordRepeat" ng-model="user.passwordRepeat" my-validation-check="user.passwordRepeat === user.password" required>
为此,我找不到任何角度指示。有什么想法吗?也许我可以为此制定自己的指令?不幸的是,我不是一个角度专家。。。应该是这样的:
angular.module('app').directive('myValidationCheck', function() {
return {
scope: true,
require: 'ngModel',
link: function(scope, elm, attrs, ngModel) {
// eval and watch attrs.myValidationCheck
// and use ngModel.$setValidity accordingly
}
};
});
谢谢
请看下面的演示
var app = angular.module('app', []);
app.directive('mcheck', function() {
return {
require: 'ngModel',
link: function(scope, elm, attrs, ngModel) {
scope.$watch(attrs.ngModel, function(value) {
if (value == attrs.mcheck) {
ngModel.$setValidity('notEquals', true);
} else {
ngModel.$setValidity('notEquals', false);
}
});
}
};
});
app.controller('fCtrl', function($scope) {
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app="app">
<div ng-controller="fCtrl">
<form novalidate name="login">
<input type="text" name="password" ng-model="user.password" mcheck="{{user.passwordRepeat}}" required>
<input type="text" name="passwordRepeat" ng-model="user.passwordRepeat" mcheck="{{user.password}}" required>
<HR/>
<span ng-show="login.password.$error.notEquals && login.passwordRepeat.$error.notEquals && login.$dirty">Passwords are not equal</span>
<HR/>
</form>
</div>
</div>
你为什么需要特殊的指令?
为何不这样做:
<div ng-controller="MyCtrl">
<form name="myForm" ng-submit="processForm()">
<input type="password" ng-model="password" placeholder="password" required/>
<input type="password" ng-model="repeatedPassword" placeholder="repeat password" required/>
<input type="Submit" value="Submit" ng-disabled="passwordsMissmatched()"/>
<span ng-show="passwordsMissmatched()">
Password mismatched
</span>
</form>
</div>
还有你的JS:
function MyCtrl($scope) {
$scope.passwordsMissmatched = function(){
return $scope.password && $scope.repeatedPassword
&& ($scope.password != $scope.repeatedPassword);
}
$scope.processForm = function(){
if($scope.password == $scope.repeatedPassword){
alert("Form processing..");
}
};
}
这种方法应该非常有效。
我已经为您创建了JSFIDLE。
我花了相当多的时间根据你下面的答案找到最好的答案(非常感谢!)。对我来说,诀窍很简单:
angular.module('myApp').directive('myValidationCheck', function() {
return {
scope: {
myValidationCheck: '='
},
require: 'ngModel',
link: function(scope, elm, attrs, ngModel) {
scope.$watch('myValidationCheck', function(value) {
ngModel.$setValidity('checkTrue', value ? true : false);
});
}
};
});
对于
<input type="password" name="passwordRepeat" my-validation-check="user.password === user.passwordRepeat" ng-model="user.passwordRepeat" required>
这是非常灵活的。您可以在我的验证检查中使用任何您想要的内容,例如,确保选中复选框或任何更复杂的表达式为真。
希望这不仅仅对我有帮助…-)
在对XML文件应用转换时,我得到了这个错误(即,未定义有效的布尔值)。这里有一个奇怪的陷阱: *我的应用程序从一个文件位置读取500到800个XML文件(XML文件大小范围从几KB到10MB),然后对每个文件进行转换。最初一切都很顺利,但在一些执行之后,它会在错误下面抛出: productsfromloc_v3.xsl: forg0006第651行错误:在xsl:call-template nam
问题内容: 我有一个表单,用于答复仅在为true 时才想显示的消息,每次单击答复按钮时,我都希望切换是否显示该表单。我怎样才能做到这一点? 问题答案: 您只需要在ng-click事件上切换“ isReplyFormOpen”的值
我正在使用MPAndroidChart显示一个相对简单的条形图。 有2件事我需要设置,我不知道如何自定义: > 我需要为每个条添加文本,而不是简单的值,每个条本身也有样式。 在每个条的顶部,我需要放置各种类型的可绘制材料来覆盖它的宽度(例如一个条中高度为2dp的蓝色,或另一个条上高度相同的黄色渐变)。 下面是我需要做的一个演示: > 我知道我也可以通过使用添加图标,但这似乎不适用于应该使用整个条形
问题内容: 我必须通过angularjs从某些网站获取json数据。我已经按照下面的链接正确地完成了所有操作。 我的问题是api不允许回调参数具有除字母,数字和_之外的任何字符。而且由于angular用’angular.callbacks._0’之类的东西替换了JSON_CALLBACK,所以不允许使用它。 如何自定义为angularjs设置此值? 谢谢 问题答案: 回调名称在此处为硬编码http
我有一个布尔值,我需要设置一个基于这个布尔值的条件。我试图得到这个布尔值,然后用它在我的FutureBuilder,但我总是得到空,即使我可以看到值是在火还原。请帮助。 小装置
我知道MapStruct可以忽略未映射的属性和特定的目标属性,但是否可以根据属性的实际值来删除属性? 我有布尔字段,只有当它们为false时,我才想排除它们。 提前感谢! 示例: 实体: DTO: MapStruct映射器: 我只想在布尔变量的值为“false”时完全排除它们。