最良のオプションは、値を分単位で保存し、カスタム フィルターを使用して表示することです。
<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)フィルターを拡張して、2 番目の引数である上限を受け取ります。
...
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>
この更新されたデモも参照してください。