I'm having trouble using watch inside of a directive along with a 3rd party plugin called selectize.
I've read a lot about $digest/$watch, but am still having problems.
My example below "works", but i'm trying to prevent the $digest already in progress errors.
There may be a better way to approach this, im just not sure how too.
plunker: http://plnkr.co/edit/3JjTsEU2BlxPWHtw6HaW?p=preview
app.directive('selectize', function($parse) {
return {
  restrict: 'A',
  require: ['ngModel'],
  scope: {
    ngModel: '=',
    options: '='
  },
  link: function(scope, el, attrs) {
    var $select = el.selectize({
      valueField: 'id',
      labelField: 'name'
    });
    var selectize = $select[0].selectize;
    // add options
    angular.forEach('options', function(tag) {
      selectize.addOption(tag);
    });
    scope.$watchCollection('options', function(newTags, oldTags) {
      // why are these the same objects?
      console.log('newTags', newTags);
      console.log('oldTags', oldTags);
      if (newTags !== oldTags) {
        // clear options
        selectize.clear();
        selectize.clearOptions();
        // add options
        angular.forEach(newTags, function(tag) {
          selectize.addOption(tag);
        });
      }
    });
    // if value changes without selecting an option,
    // set the option to the new model val
    scope.$watch('ngModel', function(val) {
      console.log('val', val);
      // selectize.setValue(val);
    });
  }
};
});
 
     
     
     
    