Javascript 已达到Angular js 10$digest()迭代次数。流产

Javascript 已达到Angular js 10$digest()迭代次数。流产,javascript,angularjs,Javascript,Angularjs,在调查了这个错误后,我发现它来自这段代码,但我不知道为什么以及如何修复它 $scope.mindate = function() { var thisDay = new Date(); var priorDate = new Date().setDate(thisDay.getDate() - 90); return new Date(priorDate); }; 角度脏检查迭代最多为10次。如果您的代码在完成脏检查之前频繁更改,它将抛出错误。 注:请张贴完整的代码 这

在调查了这个错误后,我发现它来自这段代码,但我不知道为什么以及如何修复它

$scope.mindate = function() {
    var thisDay = new Date();
    var priorDate = new Date().setDate(thisDay.getDate() - 90);
    return new Date(priorDate);
};

角度脏检查迭代最多为10次。如果您的代码在完成脏检查之前频繁更改,它将抛出错误。
注:请张贴完整的代码

这是因为您总是返回一个“新日期()

当您为模型给定值时,angular将检测到更改并触发摘要循环以应用所有更改。一旦第一个摘要周期完成,它将再次检查所有内容,以检查是否有任何更改,如果没有更改,它将停止并等待下一个更改。如果是,它将经历另一个消化周期


在你的例子中,因为你总是返回一个新的Date()对象,angular总是在每个周期后检测到一些变化,在10个周期后会出现一个硬停止,angular会说:“是的,我们不要进入无限循环。”然后,您将得到当前的错误。

尝试在html内部使用bind once

您可以缓存它:

$scope.mindate = function() {
    if(!$scope.mindateCached){
        var thisDay = new Date();
        var priorDate = new Date().setDate(thisDay.getDate() - 90);
        $scope.mindateCached = new Date(priorDate);
    }
    return $scope.mindateCached;   
};

当摘要循环以递归方式运行时,出现此错误,通常在一个更改一次又一次触发相同的更改时发生。您需要在此处添加更多代码和标记,以访问问题创建一个单独的函数来设置$scope.mindate,并且仅在您想要更改mindate时调用该函数。如果只是设置初始值,只需在控制器的开头调用该函数。