AngularJS范围错误? chrome(43)和firefox(38.0.5)的结果不同

时间:2015-06-28 15:09:58

标签: javascript angularjs google-chrome firefox angularjs-ng-repeat

我最近在使用angularjs时,我发现了一些奇怪的东西。

使用函数来确定ng-repeat中对象属性中存储的日期之间的日期差异我在chrome上获得了不同的结果,在firefox上有不同的结果

PLUNKER
来自firefox的结果:http://scr.hu/28dp/17r4y(不正确)
铬的结果:http://scr.hu/28dp/uik13(正确)

我用来计算时差的功能:

$scope.daysDiff = function (date) {
        var dateobj = new Date(date);
        var current = new Date("2015-06-28");
        var resultDays = Math.floor(Math.abs((current - dateobj) / (86400000))); //1k *60*60*24
        return  resultDays;
    };

我在ng-repeat中多次使用它来显示或隐藏这样的元素:

<tr ng-repeat="dat in data">
  ...
  <td><div class="inline" ng-show="daysDiff(dat.dateExpires) < 14">YES</div></td>
  ...
  <td><div class="inline" ng-show="daysDiff(dat.dateUpdate) < 14">YES</div></td>
  ...
</tr>

使用ng-if时的行为完全相同

//修改

这个问题不是关于使用angular生成正确的表,而是在chrome和firefox之间生成不一致

问题仍然是由于某种原因在Firefox中没有正确评估表达式。您可以在我上面附带的plunker示例中看到它。 尝试在chrome中打开它,然后在firefox中打开它。

//编辑#2 为清晰起见添加了标签

注意:角度1.3中也会出现同样的问题

1 个答案:

答案 0 :(得分:0)

问题在于 Date()对象本身.. chrome能够解析日期2015-07- 7 而没有任何问题,而firefox返回无效日期宾语。与2015-07-07合作正常。

工作实例 http://plnkr.co/edit/MnhLCohlWB3Nrc2QQ2Zi?p=preview

dateExpires: "2015-07-" + ((i<3) ? ("0"+(i + 7)) : (i + 7)), 

只是在日期编号之前添加了0