我有一个紧张的时刻试图解决这个问题,但我在我的视图中使用ng-repeat循环遍历数组:
//Array from controller that i'm receiving from a server
$scope.data =[{Day: 'Monday', startTime: '2016-03-29T12:30:00', finishTime: '2016-03-29T16:30:00'},
[{Day: 'Tuesday', startTime: '2016-03-29T12:00:00', finishTime: '2016-03-29T18:00:00'},
]
//Then looping through like this:
<div ng-repeat="a in data track by $index">
<input ng-model="a.day">
<input ng-model="a.startTime | data: 'hh:mm'">
<input ng-model="a.finishTime | data: 'hh:mm'">
</div>
如您所见,我将过滤日期仅显示时间。通过管道过滤工作正常,时间显示,但我收到此错误消息:
Expression&#39; a.startTime |&#39;是不可转让的。元素:{1}
如果我只需要显示值,请执行以下操作
<input value={{a.startTime | date: 'hh:mm'}}
但是在这种情况下我还需要从文本字段中获取值,这也就是我使用ng-model的原因。
由于此错误,我甚至无法编辑文本框中的时间。 在文本字段中绑定/分配时间的最佳解决方案是什么? 谢谢
答案 0 :(得分:0)
你需要一个指令。像
这样的东西module.directive('youDirective', function() {
return {
restrict: 'A',
require: 'ngModel',
link: function(scope, elem, attrs, controller) {
if (!controller) {
return;
}
controller.$parsers.unshift(function(value) {});
controller.$formatters.unshift(function(value) {});
}
};
});
在$formatters
中格式化视图值,在$parsers
中解析模型的视图值。
答案 1 :(得分:0)
您可以通过下一种方式执行此操作:
1)将日期转换为Date对象
$scope.data =[{Day: 'Monday', startTime: new Date('2016-03-29T12:30:00'),....
2)使用input [date]指令
<input type="date" ng-model="a.startTime">
请参阅doc here