首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >范围.返回旧值的$eval()

范围.返回旧值的$eval()
EN

Stack Overflow用户
提问于 2013-09-26 23:48:32
回答 2查看 652关注 0票数 0

我有一个有两个日期值的表单。我想验证:日期一必须低于日期二。我想做一个指令来管理这件事。因此,我将我的指令命名为lowerThanDate,并将其用于文本输入。此指令使用两个日期属性:comparisonDate.和日期。我想比较这个值,以了解日期是否低于比较日期。

我正在使用作用域.$eval来获取这些日期值并进行比较。但是,问题是范围.$eval返回的是以前的值,而不是实际值。

因此,问题是:如何才能获得实际的日期值?

这是柱塞和我的问题。对不起,如果我的问题很傻,我在角度上很新。提前谢谢你。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-09-27 22:23:49

angularjs 输入指令自动更新由ng-model属性绑定到输入的属性数据。当文本框中的值发生变化时,绑定属性也会发生变化。

此外,ui引导库中的datepicker-popup指令已经在处理日期选择事件,以更新数据绑定属性(在本例中为job.start_date)。这意味着您不必绑定到元素的focusout事件;datepicker指令正在处理这个问题。

由于您在自定义指令中要求使用ngModel控制器,而且当选定的日期发生变化时,datepicker-popup已经将更新应用到数据绑定属性中,因此您只需将ngModel.$modelValue的值用于更改即可。这也意味着可以完全消除Date属性。

考虑到所有这些,您的指令的link函数的主体变成:

代码语言:javascript
运行
复制
scope.$watch(function(){return ngModel.$modelValue}, function(){
    console.log(ngModel.$modelValue);
    console.log(scope.$eval(attrs.comparsionDate));
});  

这是更新柱塞

我还更进一步,充分实现了利用angularjs 表单验证功能的表单验证功能。如果所选日期不低于比较日期,则可以通过指令设置ngModelngModel属性,并在ngModel中使用该属性显示消息/防止表单被提交。

这是柱塞,还有关于表单验证的博客文章,我发现它很有用。

票数 2
EN

Stack Overflow用户

发布于 2013-09-27 05:01:34

以下几点应该能起作用。您要做的是使用ng模型属性将日期输入绑定到值。您的指令(在我的示例中是验证器)将有一个隔离作用域。date:'=‘在本地值(date)和父范围值(dateInput)之间建立双向绑定。在链接函数中,可以将dateValidation分配给指令的作用域,这将在日期之间进行比较。

最后,ng-show=‘dateVal环流(date,comparisonDate)’根据dateValidation函数是否传递来显示和隐藏警告。

另外,请注意,comparisonDate在HTML中拼写不同。

代码语言:javascript
运行
复制
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);
                };
            }
        }
    });

在HTML中,您希望将日期附加到ng模型属性,如下所示:

代码语言:javascript
运行
复制
<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">

好的,我把这些日期看作整数,这不是你想要的。然而,听起来这并不是你的症结所在。希望这能有所帮助!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19040536

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档