change scope.knob to var knob.

scope.knob = scope.$eval(attrs.knobData); 
to
var knob = scope.$eval(attrs.knobData);

If you name the data variable $scope.knob in the main scope than the directive will overwrite it and $watch will not function. 
An internal variable is better
merge 1 commit into yunlzheng:master from DexterMorg4n:patch-1
Merge branch 'DexterMorg4n-patch-1'