Javascript 将角度日期过滤器应用于ng选项选择框中的“MMMM”
这是我的问题。我写了一个下拉选择,以数字显示月份。我想对下拉列表应用一个过滤器,以便将数字显示为完整的月份名称 以下是初始代码:Javascript 将角度日期过滤器应用于ng选项选择框中的“MMMM”,javascript,angularjs,Javascript,Angularjs,这是我的问题。我写了一个下拉选择,以数字显示月份。我想对下拉列表应用一个过滤器,以便将数字显示为完整的月份名称 以下是初始代码: <select ng-model="month" ng-options="month as month for month in months" ng-change="updateMonth()"> <option value="">Choose Month</option> </select> 我添加了这个,试验,令
<select ng-model="month" ng-options="month as month for month in months" ng-change="updateMonth()">
<option value="">Choose Month</option>
</select>
我添加了这个,试验,令人惊讶的是它做了一些事情,但不是我想要的。。。它将列表中每个选择选项的名称更改为12月-该应用程序仍能正常运行,但没有显示所有不同的名称:
<select ng-model="month" ng-options="month as month | date: 'MMMM' for month in months" ng-change="updateMonth()">
<option value="">Choose Month</option>
</select>
js“months”只是一个从0到11个月数的数组
澄清
“月份”下拉选择中的初始显示如下:
0
1.
2.
3.
4.
5.
6.
7.
8.
9
10
十一,
使用我在其中编写的过滤器,将显示以下内容:
十二月
十二月
十二月
十二月
十二月
十二月
十二月
十二月
十二月
十二月
12月当angular filter date接收到一个整数时,它被视为时间戳毫秒,从0到11的毫秒属于同一个月,这就是为什么结果是12个同一个月的名称。
要解决此问题,请为当年的12个月创建一个时间戳数组:
let d = new Date();
// create array of timestamps for 12 month of thr current year
$scope.months = Array.apply(null, Array(12)).map((v, k) => d.setMonth(k));
现在使用HTML:
<select ng-model="month"
ng-options="month as timestamp | date: 'MMMM' for (month, timestamp) in months"
ng-change="updateMonth()">
<option value="">Choose Month</option>
</select>
普朗克:可能对某人有用,我的决定:
<select (change)="onChange($event)">
<option *ngFor="let i of [].constructor(12); let j = index;" value="{{j}}"
[selected]="j+1 == currentMonth.numberOfMonth">
{{currentMonth.year + '-' + j==0?12:j+1 + '-' + 01|date:'MMMM'}}
</option>
</select>
你的解决方案完美无瑕。我现在只需要学习它是如何工作的。Array.applynull,Array12创建一个整数数组:[0,1,2,3,4,5,6,7,8,9,10,11]。然后,Array.map和Date.setMonth函数将此数组转换为12个时间戳的数组时间戳是自1970年1月以来的毫秒数,此数组中的每个项目表示当前年份每个月的开始。然后,每个时间戳都由HTML模板中的角度日期过滤器处理。我使用了月份,时间戳以月份为单位,所以显示的名称将是月份名称,但发送到ng模型的值将是月份编号0-11