angularjs用于生日字段的循环
angularjs for loop for birthday field
我需要创建一个3个生日字段(天、月、年),由于我使用AngularJS,我认为我可以将ngRepeat指令与I<31岁左右。但它不起作用。
有人知道我可以做些什么吗?只需在下拉框中填写所有需要的值?
谢谢!
ng-rerepeat不是真正的方法。相反,使用传入表达式的ng-options指令,该表达式从控制器模型中的数组中提取标签。
首先构造控制器,该控制器将保存Years、Months和Days的数组。在$scope对象上创建属性,以便可以通过视图上的ng-options指令访问这些数组。
如果您将JQuery作为依赖项包含在内,则可以通过以下方式构建数组:
var years = $.map($(Array(numberOfYears)), function (val, i) { return i + 1900; });
var months = $.map($(Array(12)), function (val, i) { return i + 1; });
var days = $.map($(Array(31)), function (val, i) { return i + 1; });
如果您不希望有JQuery依赖项,只需为所有三个数组使用一个好的旧for循环。以下代码将在数组的$scope上为您提供一个访问器:
$scope.Years = years;
$scope.Months = months;
$scope.Days = days;
回到HTML视图中,添加一个带有ng选项和ng模型ng选项指令的select元素,例如:
<div class="ng-scope" ng-controller="BirthdayController">
<select ng-model="SelectedYear" ng-options="label for label in Years"></select>
<select ng-model="SelectedMonth" ng-options="label for label in Months"></select>
<select ng-model="SelectedDays" ng-options="label for label in Days"></select>
</div>
我假设您熟悉创建AngularJS模块并向其中添加控制器,以及向容器添加必要的ng-app指令、ng-scope类和ng-controller指令。到目前为止,您将有三个下拉列表,分别包含年份列表、12个月列表和31天列表。如果你想有一个依赖日列表,请继续阅读!:)
有关基本版本,请参阅此plnkr:http://plnkr.co/edit/VfEpwPv084H7XiifEsnm?p=preview
奖励回合:
您可以更进一步,使天数显示正确的天数,因为天数确实依赖于所选的月份和年份。二月在非闰年有28天,在闰年有29天。其他月份根据月份的不同有30天或31天。如果你想全力以赴,你需要控制器中的一个函数来确定闰年,并确定返回多少天来计算一年是否是javascript中的闰年,以下函数非常有用:
var isLeapYear = function (selectedYear) {
var year = SelectedYear || 0;
return ((year % 400 == 0 || year % 100 != 0) && (year % 4 == 0)) ? 1 : 0;}
尽管使用Angular看起来会略有不同,因为$scope已经包含selectedYear,不必传入。isLeapYear辅助函数可由另一个函数访问,该函数确定给定月份和年份组合的显示天数,如下所示:
var getNumberOfDaysInMonth = function (selectedMonth) {
var selectedMonth = selectedMonth || 0;
return 31 - ((selectedMonth === 2) ? (3 - isLeapYear()) : ((selectedMonth - 1) % 7 % 2));}
现在,在最初的select元素上几天所需要做的就是在ng-options指令上添加一个limitTo过滤器,以更改实际渲染的元素数量。月份和年份的Select元素需要ng Change指令,因此我们可以更新$scope上的字段,该字段将保存限制天数的数字。
<select ng-model="SelectedYear" ng-options="label for label in Years" ng-change="UpdateNumberOfDays()"></select>
<select ng-model="SelectedMonth" ng-options="label for label in Months" ng-change="UpdateNumberOfDays()"></select>
<select ng-model="SelectedDays" ng-options="label for label in Days | limitTo:NumberOfDays"></select>
其中NumberOfDays填充在控制器$scope.UpdateNumberOfDays()上的函数中,当然它将使用上面描述的助手函数GetNumberOfDatesInMonth。
作为额外的奖励,这里有一个智能版本的plnkr:http://plnkr.co/edit/AENh6Ynj4kNKZfLsXx4N?p=preview
享受吧!
你能使用DatePicker吗?
http://www.nsftools.com/tips/DatePickerTest.htm
您可以将select指令与要绑定的数字数组结合使用。这篇文章展示了一个函数和一个过滤器,您可以使用它来填充1-31。
以下是选择绑定到数组的基本语法:
<select ng-model="selected" ng-options="n for n in [1, 2, 3, 4, 5, 6]"></select>
请注意,如果省略ng-model
,则下拉列表似乎不会填充。
正如其他人所提到的,使用日期选择器是一个很好的选择,您可以使用AngularUI包装器指令来处理这里的jQuery UI日期选择器。
我的方法包括使用以下内容填充日期选择列表:
<select class="form-control" ng-model="birthdate.day"
ng-options="day for day in birthDays()">
</select>
在控制器上,birthDays()函数是:
$scope.birthDays = function () {
var year = parseInt($scope.birthdate.year, 10);
var month = parseInt($scope.birthdate.month, 10);
var num = new Date(year, month + 1, 0).getDate();
var i;
var days = [];
for (i = 1; i <= num; i++) {days.push(String(i)); }
return days;
};
- 而循环只设置php中输入字段中的第一个值
- 循环遍历数组并将值输入到字段中
- 循环访问文档 (validate_doc_update) 中的 CouchDB 字段
- 如何在 for 循环中访问 json 数组字段的名称
- 我的单选按钮没有从foreach循环中获得值,表单验证返回'必填字段'即使已检查
- angularjs用于生日字段的循环
- 循环遍历字段以使用jQuery进行验证
- 循环遍历所有字段,如果任何一个字段的验证失败jquery,则返回false
- jQuery必需字段循环.基于CSS类
- JS 字段验证 - 循环遍历对象,每个字段有三个数据注意事项
- jquery 每个循环检查是否至少填写了一个字段
- JavaScript,循环字段和验证
- 如何在煎茶上循环存储和计数字段数据
- jQuery循环为每个“drop”生成隐藏字段
- 在 Jquery 中添加循环变量并存储在输入字段中
- 在循环访问集合时将动态 ID 分配给隐藏字段
- 如何使用for循环随机生成JSON数据集的字段名称和值
- Rails|Javascript同步多个字段,避免无限循环
- 在窗体中的字段中循环
- 我想在循环中点击组合框时填写我的字段