Validation 作用域。$eval()返回旧值

Validation 作用域。$eval()返回旧值,validation,angularjs,scope,angularjs-directive,angular-ui,Validation,Angularjs,Scope,Angularjs Directive,Angular Ui,我有一张有两个日期值的表格。我要验证:日期一必须小于日期二。我想做一个指令来管理这个。因此,我将指令命名为lowerstandarte,并将其用于文本输入。此指令使用两个日期属性:日期和比较数据。我想比较这些值,以了解日期是否低于比较日期 我正在使用scope.$eval获取这些日期值并进行比较。但是,问题是,范围。$eval返回的是以前的值,而不是实际值 因此,问题是:如何获取实际日期值? 这是我的问题的关键。对不起,如果我的问题是愚蠢的,我是新来的。提前谢谢你。下面的内容应该可以解决这个问题

我有一张有两个日期值的表格。我要验证:日期一必须小于日期二。我想做一个指令来管理这个。因此,我将指令命名为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中用于显示消息/防止表单提交

这是,这是关于我发现有用的表单验证的