我想做以下事情:
我的控制器模型中有一个日期对象,我想让用户修改它.应为用户提供两个输入字段.第一个输入字段应该修改日期,另一个时间应该修改.两个输入字段都应该在同一个日期模型上工作.
<input ng-model="model.date" date-format="YYYY-MM-DD">
<input ng-model="model.date" date-format="HH:mm:SS">
Run Code Online (Sandbox Code Playgroud)
我没有找到关于这种约束的文献.通常,ng-model指令负责输入字段的值.现在我想用我自己的格式覆盖这个值.此外,如果用户更改输入,则应解析更改并将其放回日期对象中.
由于vanilla js中的日期操作有点奇怪,我使用moment.js来格式化和解析日期和字符串.
我目前的方法如下:
app.directive('dateFormat', function() {
return {
restrict: 'A',
link: function(scope, el, at) {
var format = at.dateFormat;
scope.$watch(at.ngModel, function(date) {
var result = moment(date).format(format);
el.val(result);
});
}
};
});
Run Code Online (Sandbox Code Playgroud)
但是,只要我想在浏览器中更改输入值,这就会中断.我得到一些NaN:NaN ......
我的问题是:
jjp*_*aga 16
您正在寻找过滤器:
//In your controller
$scope.modelDate = $filter('date')(dateToFormat, "YYYY-MM-DD");
//In your view
<input ng-model="modelDate" type="text">
Run Code Online (Sandbox Code Playgroud)
话虽这么说,你要做的并不是"关闭",因为每当用户写入输入时,格式化就会中断.您需要使用ngModel,它具有使用Directives(API)的特殊方式,并且可以直接作为链接过程中的第四个参数进行浏览.
所以对于你的代码,它将是这样的:
return {
require: 'ngModel',
link: function(scope, element, attrs, ngModelController) {
ngModelController.$parsers.push(function(data) {
//View -> Model
return data;
});
ngModelController.$formatters.push(function(data) {
//Model -> View
return $filter('date')(data, "YYYY-MM-DD");
});
}
}
Run Code Online (Sandbox Code Playgroud)
更多信息在这里