我有一个格式化日期字符串的指令。它在页面加载时成功运行,但在此之后,任何输入更改都不会运行格式化程序。
appTracker.directive('dateText', function() {
return {
restrict: 'A',
require: 'ngModel',
link: function(scope, element, attrs, ctrl) {
ctrl.$parsers.push(function(data) {
//Cut out all characters that are not numbers
var dateString = data.replace(/\D/g, '');
if(dateString.length != 8) {
ctrl.$setValidity('dateText', false);
console.log(ctrl);
return dateString;
}
else if ( dateString.length == 8) {
//Take the MM/DD/YYYY format and flip it to YYYY-MM-DD so we can save it correctly
ctrl.$setValidity('dateText', true);
console.log(ctrl);
console.log(dateString);
return dateString.substr(4, 4) + '-' + dateString.substr(0,2) + '-' + dateString.substr(2,2);
}
});
ctrl.$formatters.push(function(data){
console.log('ran');
if(data) {
var dateString = data.replace(/\D/g, '');
if(dateString.length <= 2) {
var returnString = dateString;
}
else if (dateString.length > 2 && dateString.length <= 4) {
var returnString = dateString.substr(0,2) + '/' + dateString.substr(2);
}
else if (dateString.length > 4 && dateString.length < 8) {
var returnString = dateString.substr(0,2) + '/' + dateString.substr(2,2) + '/' + dateString.substr(4);
}
else if(dateString.length >= 8 ) {
var returnString = dateString.substr(4,2) + '/' + dateString.substr(6,2) + '/' + dateString.substr(0,4);
}
return returnString;
}
});
}
};
});
在加载时,数据库通过&#39; 1986-05-12&#39;并且模型设置成功。该视图显示了&#39; 12/05 / 1986&#39;应该如此。
但是,当您尝试更新输入时,$ formatter永远不会再次运行。它从不记录&#39;运行&#39;,视图始终显示用户键入的原始输入。但是,解析器正在运行,模型已成功格式化为我正在寻找的YYYY-MM-DD格式。
输入输入时,格式化程序是否也不能运行?我在这里做错了什么?