Validation 作用域。$eval()返回旧值
我有一张有两个日期值的表格。我要验证:日期一必须小于日期二。我想做一个指令来管理这个。因此,我将指令命名为lowerstandarte,并将其用于文本输入。此指令使用两个日期属性:日期和比较数据。我想比较这些值,以了解日期是否低于比较日期 我正在使用scope.$eval获取这些日期值并进行比较。但是,问题是,范围。$eval返回的是以前的值,而不是实际值 因此,问题是:如何获取实际日期值?Validation 作用域。$eval()返回旧值,validation,angularjs,scope,angularjs-directive,angular-ui,Validation,Angularjs,Scope,Angularjs Directive,Angular Ui,我有一张有两个日期值的表格。我要验证:日期一必须小于日期二。我想做一个指令来管理这个。因此,我将指令命名为lowerstandarte,并将其用于文本输入。此指令使用两个日期属性:日期和比较数据。我想比较这些值,以了解日期是否低于比较日期 我正在使用scope.$eval获取这些日期值并进行比较。但是,问题是,范围。$eval返回的是以前的值,而不是实际值 因此,问题是:如何获取实际日期值? 这是我的问题的关键。对不起,如果我的问题是愚蠢的,我是新来的。提前谢谢你。下面的内容应该可以解决这个问题
这是我的问题的关键。对不起,如果我的问题是愚蠢的,我是新来的。提前谢谢你。下面的内容应该可以解决这个问题。您要做的是使用ng model属性将日期输入绑定到值。您的指令(我的示例中的验证器)将有一个隔离作用域。日期:“=”设置本地值(日期)和父范围值(日期输入)之间的双向绑定。在link函数中,您可以将dateValidation分配给指令的作用域,这将在日期之间进行比较 最后,ng show='dateValidation(date,comparisonData)'根据dateValidation函数是否通过显示和隐藏警告 另外,请注意,comparisonDate在HTML中的拼写不同
angular.module('YourApp')
.directive('validator', function() {
return {
restrict: 'E',
template: "<div ng-show='dateValidation(date, comparisonDate)'>Dates are out of order</div>",
scope: {
date:'=',
comparisonDate:'='
},
link: function(scope) {
scope.dateValidation = function(date, comparisonDate) {
// Your date comparison logic goes here
return parseInt(date) > parseInt(comparisonDate);
};
}
}
});
angular.module('YourApp'))
.directive('validator',function(){
返回{
限制:'E',
模板:“日期不符合顺序”,
范围:{
日期:'=',
比较数据:'='
},
链接:功能(范围){
scope.dateValidation=函数(日期,比较数据){
//你的约会比较逻辑是这样的
返回parseInt(日期)>parseInt(比较数据);
};
}
}
});
在HTML中,您希望将日期附加到ng模型属性,如下所示:
<p>Date 1: <input type="text" ng-model="dateInput"></p>
<p>Date 2: <input type="text" ng-model="comparisonDateInput"></p>
<validator date="dateInput" comparison-date="comparisonDateInput">
日期1:
日期2:
好的,我把这些日期当作整数,这并不是你想要的。然而,听起来这并不是你的症结所在。希望这有帮助 angularjs自动更新绑定到由ng模型
属性输入的属性数据。当文本框中的值更改时,绑定属性也会更改
此外,ui引导库中的datepicker popup
指令已经在处理日期选择事件以更新数据绑定属性(在本例中为job.start\u date
)。这意味着您不必绑定到元素的focusout
事件;datepicker指令正在处理此问题
由于您需要自定义指令中的ngModel
控制器,并且当所选日期更改时,datepicker弹出窗口
已将更新应用于数据绑定属性,因此您只需$watch
查看ngModel.$modelValue
的值即可进行更改。这也意味着可以完全消除Date
属性
考虑到所有这些,指令的链接
函数的主体变为:
scope.$watch(function(){return ngModel.$modelValue}, function(){
console.log(ngModel.$modelValue);
console.log(scope.$eval(attrs.comparsionDate));
});
这是我的建议
我还更进一步,充分利用angularjs功能实现了较低标准的功能。当所选日期不低于比较日期时,指令可以设置ngModel
的$error
属性,并在HTML中用于显示消息/防止表单提交
这是,这是关于我发现有用的表单验证的