【发布时间】:2017-09-20 09:57:38
【问题描述】:
我得到一个整数,表示以分钟为单位的持续时间,但如果大于特定值,我想将其显示为小时或天,但我仍想以分钟为单位保留 ng-model 值,因此,如果用户对值进行了任何更改,并且我的应用程序将其读回,则应该在几分钟内。
例如: 如果我读到“480 分钟”,则显示应该是 8(小时)。 如果我读到“1440 分钟”,它应该是 1(天)。 如果用户将其更改为 0.5(天),则 ng-model 中的值应为 720。
我想将数字部分保留在输入中,而度量单位(分钟/小时/天)保留在输入右侧的标签中。
我创建了一个如下所示的“持续时间”过滤器:
myApp.filter('duration', function() {
//Returns duration from minutes in hours
return function(minutes) {
var hours = Math.floor(minutes / 60);
return hours;
}
});
但是,当我将它添加到以下元素时
...list iteration through fields, where textField is the current iteration object
<input type="number" class="text-input" ng-model="textField.CustomFieldValue | duration">
它在控制台中显示一条错误消息:
[ngModel:nonassign] Expression 'textField.CustomFieldValue | duration' is non-assignable. Element: <input type="number" class="text-input ng-pristine ng-untouched ng-valid" ng-model="textField.CustomFieldValue | duration">
我知道我的过滤器(还)不正确,但我只是将它用于小测试。
我对 AngularJS 不是很熟悉,所以我可能以错误的方式使用过滤器。
过滤器正在工作,但是,如果值为 480,我确实会显示 8 小时,但我担心控制台中的错误消息。
【问题讨论】:
-
用户如何知道输入中的值是小时还是天?我认为它应该是指令而不是过滤
-
持续时间值总是以分钟为单位存储和发送,但应用程序应该能够以不同的格式显示它们,同时在逻辑中仍然以分钟为单位保持值,所以当它再次发送时,几分钟后。用户将通过数字输入旁边的标签知道它是否以分钟/小时/天显示。好的,所以应该使用指令而不是过滤器?
标签: javascript angularjs