最好的选择似乎是将值存储为分钟并使用自定义过滤器显示它们。
<div ng-controller="myCtrl">
<div range-slider pin-handle="min" attach-handle-values
prevent-equal-min-max step="{{sliderConfig.step}}"
min="sliderConfig.min" max="sliderConfig.max"
model-min="sliderConfig.userMin" model-max="sliderConfig.userMax"
filter="hourMinFilter">
</div>
</div>
app.controller('myCtrl', function ($scope) {
$scope.sliderConfig = {
min: 0,
max: 120,
step: 10,
userMin: 0,
userMax: 30
};
});
app.filter('hourMinFilter', function () {
return function (value) {
var h = parseInt(value / 60);
var m = parseInt(value % 60);
var hStr = (h > 0) ? h + 'hr' : '';
var mStr = (m > 0) ? m + 'min' : '';
var glue = (hStr && mStr) ? ' ' : '';
return hStr + glue + mStr;
};
});
另请参阅这个简短的演示。
更新:
允许自定义过滤器最大值并显示不同文字的修改版本(根据大众需求):
1)扩展过滤器以接收第二个参数:最大限制。
...
return function (value, max) {
if (value == max) { return 'All'; }
var h = parseInt(value / 60);
var m = parseInt(value % 60);
...
注意:使用==
代替===
非常重要,以便根据实际数字检查数字的字符串表示形式。如果您想避免使用==
,则应首先将两个参数都转换为 String 或 Integer。
2)修改 HTML 以包含额外的过滤器参数:
<div range-slider pin-handle="min" attach-handle-values
....
filter="hourMinFilter" filter-options="{{sliderConfig.max}}">
</div>
另请参阅此更新的演示。