customizing ngModel directive to support model->view binding in jquery plugin


I am decorating a standard text input with the jquery plugin for tags input, which essentially replaces the text input in my HTML with a text area where users can write tag names and hit enter to have them converted to discrete graphical tags. (see demo at

I am placing an ngModel directive in the original text input.

I am able to keep my scope updated with changes made in the tags input field by listening to the change handler from the plugin, parsing the ngModel attribute from the original text input html tag, and updating the scope directly.

However, the issue is that when Angular detects a change in the model and updates the view using binding, it is setting the value on the original text input which does not cause any sort of event I can bind to to know when to update the plugin's value, since "change" only fires due to user input.

Is there a way to modify the default ngModel directive behavior to have it fire an event or run a function I specify when it is processing bindings, specifically from model to view?

By : arieljake


You need to override the ngModel.$render function

directive.tabbable = function() {
  return {
    require: 'ng-model',
    link: function(scope, element, attrs, ngModel) {
      // do work to register the jQuery widget
      ngModel.$render = function() {
        // read ngModel.$viewValue and update the jQuery widget with it.

This video can help you solving your question :)
By: admin