如果要填充字段的初始值,那麼下面的工作
//Controller:
$scope.myDate = new Date('2014-03-08T00:00:00');
//HTML:
<input type="date" ng-init="model=(myDate | date:'yyyy-MM-dd')" ng-model="model" />
不過,我強烈建議創建一個自定義日期字段指令。
一個自定義輸入區的指令具有以下優點:模型和視圖之間
- 雙向綁定。 例如,當您在輸入字段中輸入有效日期時,它會自動爲模型分配一個javascript日期;並且當您將有效的javascript日期作爲模型分配時,它將自動在文本字段中對其進行格式化。
- 表單驗證支持。輸入無效日期時,您可以設置$ error標誌,該標誌可用於視圖綁定中(即顯示錯誤消息)。設置錯誤標誌也會將
form.$valid
設置爲false,以便您可以有條件地將表單提交給服務器。
有實現自定義的日期指示時要考慮三個基本的東西:
- 解析器將解析輸入文本和返回模型 (在這種情況下,一個javascript日期) 。
- 格式化程序將格式化模型並將其顯示在文本字段中。
- 設置可用於UI 中的自定義表單驗證的可選驗證標誌。
日期指令:
myApp.directive('dateField', function($filter) {
return {
require: 'ngModel',
link: function(scope, element, attrs, ngModelController) {
ngModelController.$parsers.push(function(data) {
//View -> Model
var date = Date.parseExact(data,'yyyy-MM-dd');
// if the date field is not a valid date
// then set a 'date' error flag by calling $setValidity
ngModelController.$setValidity('date', date!=null);
return date == null ? undefined : date;
});
ngModelController.$formatters.push(function(data) {
//Model -> View
return $filter('date')(data, "yyyy-MM-dd");
});
}
}
});
注:對於分析日期,該指令使用Date.js(外部庫)。
CSS:
.error {
color:red;
}
.error-border {
border: solid 2px red;
}
HTML:
<form name="myForm">
<input ng-class="{'error-border': myForm.myDate.$error.date}" type="date"
name="myDate" ng-model="myDate" date-field />
<span ng-show="myForm.myDate.$error.date" class="error">
Please enter a valid date!!!
</span>
<br /> Raw Date: {{myDate}}
<br /> Formatted Nicely: {{ myDate | date:'yyyy, MMMM dd'}}
<br /> Is Valid Date? {{ !myForm.myDate.$error.date}}
<br /> Is Form Valid? {{ myForm.$valid }}
</form>
控制器:
myApp.controller('ctrl', function($scope) {
$scope.myDate = new Date('2014-03-08T00:00:00');
});
Demo JS Fiddle與Date.js
Demo JS Fiddle與Moment.js
簡單 - 謝謝:) – Jen
雖然在試圖包含date.js文件,它正在做一些時髦的時區轉換,所以我會輸入日期爲22/08/2014,並在$ scope.item中看到該值在js文件中,但是當它碰到我的MVC控制器時,它突然在21/08/2014 2:00:00 PM。我甚至使用了en-AU文件(閱讀下載指令後:/)) – Jen
@pixelbits:不錯:)有一點需要注意:在你的$ parser中,如果值無效(不爲空),你應該返回undefined。 – gkalpak