2016-12-02 46 views
1

如何动态设置Angular Bootstrap Datepicker的minMode?uib-datepicker-popup动态minMode

,我得到了它的唯一方法,是用下面的:

<input type="text" ng-model="myDate" 
     uib-datepicker-popup="{{datepickerFormat}}" 
     datepicker-options="{'minMode': minMode}"/> 

在控制器

... 
$scope.minMode='day'; 

它运作良好,但是当minMode变化和日期选择器重新打开,我有一个在浏览器控制台中出现$compile:nonassignNon-Assignable错误。所以我想这样做:

<input type="text" ng-model="myDate" 
     uib-datepicker-popup="{{datepickerFormat}}" 
     min-mode="minMode"/> 

但不幸的是,它不工作了。

Angular version: 1.5.9 
Bootstrap version: 3.3.7 
angular-bootstrap version: 1.2.5 

See in Plunker

+0

添加plunkr改变该minMode财产,这将是明显的.. –

+0

谢谢。我编辑 –

回答

1

您没有将minMode值正确

由于您将选项放入您的日期选取器中,并稍后使用按钮更改这些选项,您需要在控制器中定义该对象并在两个位置都参考它。

<div class="input-group"> 
    <input type="text" 
     ng-model="myDate" 
     is-open="showDatePicker" 
     uib-datepicker-popup="mm-dd-yyyy" 
     datepicker-options="options"/> 
</div> 

在控制器

$scope.options = {'showWeeks': false, 'minMode': 'month'}; 

现在你可以使用你的ng-click表达

<button ng-click="options.minMode = 'day'" class="btn">Day</button> 
<button ng-click="options.minMode = 'month'" class="btn" >Month</button> 

Updated plunk

+0

谢谢!你帮我找到解决方案。当点击按钮时,我不得不调用改变整个选项对象的方法。当我按照你的建议做时,日期选择器改变最小模式,但当我点击其他模式时不会再变回,我不知道为什么。 –

+0

尝试打印以控制您的选项对象,看看您是否正确更改'minMode' – svarog

+1

现在我明白发生了什么。你的解决方案是对的。我认为这是行不通的,因为当你选择“年”时,例如,在“日”之后,日期选择器将在年份选择中首先打开。但现在我看到,如果我选择一年,它允许我选择一个月和一天。非常感谢你。 –

0

你有没有尝试使用功能,而不是财产?像这样

HTML

<input type="text" ng-model="myDate" 
     uib-datepicker-popup="{{datepickerFormat}}" 
     min-mode="getMinMode()"/> 

控制器

$scope.getMinMode = function(){ 
    return 'day'; //you can change this for any required logic that specifies your minMode 
}; 

这样的功能被重新评估每一个角度的时间执行$消化,你会得到相同的字符串每次minMode更改

+0

是的,我尝试这个,但不起作用。 –