Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/367.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将角度日期过滤器应用于ng选项选择框中的“MMMM”_Javascript_Angularjs - Fatal编程技术网

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