md-max日期工作但是在我设置md-max-date

时间:2017-06-18 17:16:21

标签: angularjs datepicker angular-material

我正试图像今天这样设定今天的最长日期:

My controller:

vm.maxDate= maxDate;
function maxDate() {
    return new Date((new Date()).getFullYear(), (new Date()).getMonth(), (new Date()).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()”时,我得到了这个角度误差。我不知道为什么会这样。任何帮助将不胜感激。感谢

这是错误的链接 Link To Error

这是错误:

  

错误:$ rootScope:infdig   无限$ digest循环

     

达到10 $ digest()次迭代。中止!   观察者在最后5次迭代中被解雇:[[{“msg”:“fn:function(c,e,f,g){f = d&amp;&amp; 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“}] ,[{“msg”:“fn:function(c,e,f,g){f = d&amp;&amp; g?g [0]:a(c,e,f,g); return b(f, C,E)} “ ”的newval“: ”2017-06-18T04:00:00.000Z“, ”OLDVAL“: ”2017-06-18T04:00:00.000Z“}],[{ ”msg“ 中:” fn:function(c,e,f,g){f = d&amp;&amp; g?g [0]:a(c,e,f,g); return b(f,c,e)}“,” newVal“:”2017-06-18T04:00:00.000Z“,”oldVal“:”2017-06-18T04:00:00.000Z“}],[{”msg“:”fn:function(c,e, f,g){f = d&amp;&amp; g?g [0]:a(c,e,f,g); return b(f,c,e)}“,”newVal“:”2017-06- 18T04:00:00.000Z“,”oldVal“:”2017-06-18T04:00:00.000Z“}],[{”msg“:”fn:function(c,e,f,g){f = d&amp; ;&amp; 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”}]]

2 个答案:

答案 0 :(得分:2)

更改控制器以初始化最大日期:

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

HTML

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

当AngularJS模板包含带有函数的AngularJS表达式时,框架会多次执行该函数,直到表达式稳定为止。由于函数每次都返回一个新的Date对象,因此范围变量永远不会稳定,导致$rootScope:infdig error

AngularJS将应用程序分为模型,视图和控制器。控制器创建并修改模型,模板根据模型渲染视图。模板永远不应该创建模型。它应该只根据模型渲染视图,并向控制器提供事件的修改

答案 1 :(得分:0)

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

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

控制器

var today = new Date();
$scope.maxDate = new Date(today.getFullYear(), today.setMonth(), today.getDate());

注意: - 为什么要创建年份,月份和日期的新数据,您可以尝试这样做。这是一种简单而正确的方法。 更多信息 https://material.angularjs.org/latest/demo/datepicker

plnkr.co/edit/jEd8I2IbxypVPu0uGU1y?p=preview