我创建了我自己的指令来包装 jquery-knob 插件,它还提供了我需要的一些很酷的行为(动画、不同的颜色等),如果你喜欢可以使用它并根据需要进行操作
//jquery-knob directive
.directive('knob', function() {
function link( scope, element , attr ) {
function draw() {
element.empty();
var tmpl = $('<input type="text">');
var min = attr.min ? parseInt(attr.min) : 0;
var max = attr.max ? parseInt(attr.max) : 0;
var val = attr.value ? parseInt(attr.value) : "";
var readonly = attr.readonly == "true" ? true : false;
var sign = attr.sign ? attr.sign : "";
var fgColor = "#00A65A"; //green - success
var dangerLimit = attr.dangerLowerThen;
var warnLimit = attr.warnLowerThen;
if(dangerLimit && val < dangerLimit) {
fgColor = "#F56954"; //red - danger
} else if(warnLimit && val < warnLimit) {
fgColor = "#F39C12"; //yellow - warning
}
element.append(tmpl);
var options = {
value : 0,
min : min,
max : max > val ? max : val,
dynamicDraw: true,
fgColor : fgColor,
readOnly : readonly,
rtl : (attr.dir == 'rtl' ? true : false),
draw : function () { $(this.i).val(this.cv + sign); }
};
tmpl.knob(options);
tmpl.animate({
value: 100
}, {
duration: 1000,
easing: 'swing',
progress: function () {
$(this).val(Math.round(this.value/100 * val)).trigger('change');
}
})
}
scope.$watch(function () {
return [attr.value, attr.max, attr.min , attr.readonly];
}, draw, true);
};
JSFiddle example