希望其他人也觀察到了這一點: -AngularJS數據綁定鉻日期時間控制的工作不更新後24.0.1312.52
我們使用AngularJS 1.0和使用類型=「日期」與元素讓Chrome的默認不錯選擇器日期時間。 一切都很好,直到鉻最近更新爲[24.0.1312.52]。現在,如果我使用datetime選擇器更改日期,AngularJS數據綁定不會保存它以綁定$ scope的json屬性。
如果我通過任何鍵盤按鍵更改日期,數據綁定將日期保存到屬性綁定。
可能是導致此問題的原因。
希望其他人也觀察到了這一點: -AngularJS數據綁定鉻日期時間控制的工作不更新後24.0.1312.52
我們使用AngularJS 1.0和使用類型=「日期」與元素讓Chrome的默認不錯選擇器日期時間。 一切都很好,直到鉻最近更新爲[24.0.1312.52]。現在,如果我使用datetime選擇器更改日期,AngularJS數據綁定不會保存它以綁定$ scope的json屬性。
如果我通過任何鍵盤按鍵更改日期,數據綁定將日期保存到屬性綁定。
可能是導致此問題的原因。
我們angularJS谷歌羣體得到幫助: -
https://groups.google.com/forum/?fromgroups=#!topic/angular/ycYzD3xRKS8
JSFeedle由彼得·培根達爾文
var module = angular.module('demoApp',[]);
module.directive('input', function() {
return {
require: '?ngModel',
restrict: 'E',
link: function (scope, element, attrs, ngModel) {
if (attrs.type="date" && ngModel) {
element.bind('change', function() {
scope.$apply(function() {
ngModel.$setViewValue(element.val());
});
});
}
}
};
});
當您通過選取器選擇日期時,Chrome似乎不會觸發input
。短期入侵是change
事件(其中Chrome 發生火災)至input
;幸好AngularJS不使用事件本身在聽者,所以你不必擔心映射事件值或任何東西:
$('body').on('change', 'input[type="date"]', null, function(){
$(this).trigger('input');
});
一個更好的解決辦法是找出爲什麼瀏覽器不點火input
。警告:儘管AngularJS代碼中似乎沒有任何地方會導致change
觸發(從而啓動無限循環),粗略測試意味着上述工作,但「更好的解決方案」將是更好的解決方案。
我已經注意到了相同的行爲,並注意到Sutikshan走在正確的道路上。
HTML 5 input date要求值爲RF 3339格式,因此,我們可以調整我們的AngularJS input directive以相應地格式化和解析值。
angular.module('myApp', []).directive('input', ['$filter',
function($filter) {
return {
require: '?ngModel',
restrict: 'E',
link: function(scope, element, attrs, ngModel) {
if (!ngModel || attrs.type != "date") return;
// Using AngularJS built in date filter, convert our date to RFC 3339
ngModel.$formatters = [function(value) {
return value && angular.isDate(value)
? $filter('date')(value, 'yyyy-MM-dd')
: '';
}];
// Convert the string value to Date object.
ngModel.$parsers = [function(value) {
return value && angular.isString(value)
? new Date(value)
: null;
}];
}
};
}]);
的基礎是,我們保證NgModelController使用我們$格式化和$解析器分別更新視圖值和模型值時,。