docs: function(key, fn) {
          var attrs = this,
              $$observers = (attrs.$$observers || (attrs.$$observers = createMap())),
              listeners = ($$observers[key] || ($$observers[key] = []));
  
          listeners.push(fn);
          $rootScope.$evalAsync(function() {
            if (!listeners.$$inter && attrs.hasOwnProperty(key) && !isUndefined(attrs[key])) {
              // no one registered attribute interpolation function, so lets call it manually
              fn(attrs[key]);
            }
          });
  
          return function() {
            arrayRemove(listeners, fn);
          };
        }