Angularjs md max date正常工作,但在设置md max date后立即获得此角度误差

Angularjs md max date正常工作,但在设置md max date后立即获得此角度误差,angularjs,datepicker,angular-material,Angularjs,Datepicker,Angular Material,我试图将今天的最长日期设置为: 我的控制器: vm.maxDate=maxDate; 函数maxDate(){ 返回新日期((新日期()).getFullYear(),(新日期()).getMonth(),(新日期()).getDate()); } 我的HTML: <md-datepicker md-placeholder="Date of Creation" md-max-date="myCtrl.maxDate()"

我试图将今天的最长日期设置为:

我的控制器:
vm.maxDate=maxDate;
函数maxDate(){
返回新日期((新日期()).getFullYear(),(新日期()).getMonth(),(新日期()).getDate());
}
我的HTML:

<md-datepicker
             md-placeholder="Date of Creation"
             md-max-date="myCtrl.maxDate()"
             ng-model="myCtrl.form.startDate">
</md-datepicker>

它按预期工作,用户无法在maxDate之后选择任何内容。但是,当我在html中编写md max date=“myCtrl.maxDate()”时,就会出现这个角度错误。我不知道为什么会这样。任何帮助都将不胜感激。谢谢

这是指向错误的链接

这就是错误:

错误:$rootScope:infdig 无限$摘要循环

已达到10$digest()迭代次数。流产! 在过去5次迭代中,观察者们发射了最后5次迭代中的射击:[[{“msg:”[{“msg:”fn:功能(c,e,f,f,f,g)g[0]:a(c,e,e,f,f,f,g;返回b(f,c,c,c,c,e,e,e,e);“newVal:“2017-06-06-06-06-18-18t4:2017-06-2017-06-2017-06-18-18-t04-t04-14-14 14 14 14:00:00:00:00:00:00:00:00:00:00:00:00:00.00.00.00.00.00.00.00 00 00.00 00 00 00 00 00 00 00 00 00.00 00 00 00 00 00 00 00 00 00 00.00.00 00 00.00 00 00 00.00 00 00.00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 000Z“}],{“msg”:“纽瓦尔”的“纽瓦尔”的“新瓦尔”的“新瓦尔”的“2017-06-06-2017-06-18T04(f、e、e、e、f、c、c、c、e)的“2017-06-18T04:00:00.000Z”、“奥德瓦尔”的“2017-06-06-06-2017-06-06-18-t04:00:00:00.00.000Z”的“2017-06-18-18-18-t0-18-t0 0 0 0 0-14-14-14.00-00-00.00.00.00.00.00000.00.000 000 000”的“““,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,““MS“MS“c,e,f,g){f=d&&g?g[0]:a(c,e,f,g);返回b(f,c,e)},“newVal”:“2017-06-18T04:00:00.000Z”,“oldVal”:“2017-06-18T04:00:00.000Z”}]


我认为MIN和Max将以变量而不是函数作为输入

<md-datepicker
             md-placeholder="Date of Creation"
             md-max-date="myCtrl.maxDate"
             ng-model="myCtrl.form.startDate">
</md-datepicker>
注意:-为什么要为年、月和日期创建新数据?您可以这样尝试。这是一种简单而正确的方法。 更多信息


plnkr.co/edit/jEd8I2IbxypVPu0uGU1y?p=预览更改控制器以初始化最大日期:

vm.maxDate= initMaxDate();
function initMaxDate() {
    return new Date((new Date()).getFullYear(), (new Date()).getMonth(), (new Date()).getDate());
}
HTML


当AngularJS模板包含带有函数的AngularJS表达式时,框架将多次执行该函数,直到表达式稳定。由于函数每次返回一个新的日期对象,因此范围变量永远不会稳定,从而导致


AngularJS将应用程序分为模型、视图和控制器。控制器创建和修改模型,模板根据模型呈现视图。模板不应创建模型。它只应根据模型呈现视图,并向控制器提供事件以修改模型。

按此处所示的方式执行material.angularjs.org/latest/demo/datepicker,但它不起作用。它删除了错误,但最大日期不起作用。您的做法有所不同。您分配函数而不是变量。我最初尝试使用函数,如图所示。然后我转到函数。感谢@Jonnysai的帮助,但georgeawg的解决方案wWorks。我认为这就是问题所在。他的解释对于angular抛出的错误是有意义的:scope变量永远不会稳定,导致$rootScope:infdig erroroh很棒!!。但我已经很清楚了。感谢@georgeawg为这个错误提供的解决方案和解释。很好的解释!!而模板可以用angular做很多事情因此,应该明智地使用这种权力。
vm.maxDate= initMaxDate();
function initMaxDate() {
    return new Date((new Date()).getFullYear(), (new Date()).getMonth(), (new Date()).getDate());
}
<md-datepicker
     md-placeholder="Date of Creation"
     md-max-date="myCtrl.maxDate ̶(̶)̶ "
     ng-model="myCtrl.form.startDate">
</md-datepicker>