我正在尝试创建可用于比较多个项目中的两个字段的指令。
标记:
<div class="form-group">
<input ng-model="user.password" type="password" name="password" />
</div>
<div class="form-group">
<input ng-model="user.confpassword" ng-compare="password" name="confpassword" type="password" />
<p ng-show="registrationform.password.$error.ngcompare" class="help-block">Password's don't match</p>
指令:
"use strict";
angular.module('app.directive.ngCompare', []).directive('ngCompare', function () {
return {
require: 'ngModel',
link: function (scope, element, attrs, ngModelController)
{
ngModelController.$parsers.unshift(function (viewvalue) {
console.log(scope); // doesnot contain password field object
console.log(viewvalue); // gives me value of confpassword field
console.log(scope[attrs.ngCompare]); // undefined
});
}
}});
我还没有完成我的指令的编写,但是,在开发期间,当我在控制台范围内时,我没有获得第一个密码的值,但我获得了 confpassword 的值。我将这个指令作为“app.directive.ngCompare”包含在我的主应用程序中。是因为我没有得到密码的值吗?
我使用的是 Angular 版本 1.3.9。我知道那里有很多类似的指令,但我需要逐步弄清楚它们是如何运行的,所以开始从头开始创建。是否有任何其他方法可以使用 angularjs 技术而不是 jquery 方法来获取密码的值。
最佳答案
到目前为止给出的答案的问题在于它们都创建了一个隔离范围。这意味着您不能在同一输入或另一个指令上使用其他指令。
可以通过修改上面的内容来解决这个问题:
.directive("compareTo", function() {
return {
require: "ngModel",
link: function(scope, element, attrs, ctrl) {
ctrl.$validators.compareTo = function(val) {
return val == scope.$eval(attrs.compareTo);
};
scope.$watch(attrs.compareTo, function() {
ctrl.$validate();
});
}
};
});
关于javascript - 比较angularjs指令中的两个字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28063107/