function setSpecialAttr(element, attrName, value) {
      // Attributes names that do not start with letters (such as `(click)`) cannot be set using `setAttribute`
      // so we have to jump through some hoops to get such an attribute
      // https://github.com/angular/angular.js/pull/13318
      specialAttrHolder.innerHTML = '<span ' + attrName + '>';
      var attributes = specialAttrHolder.firstChild.attributes;
      var attribute = attributes[0];
      // We have to remove the attribute from its container element before we can add it to the destination element
      attributes.removeNamedItem(attribute.name);
      attribute.value = value;
      element.attributes.setNamedItem(attribute);
    }
@ngdoc method
@name $compile.directive.Attributes#$observe
@kind function

@description
Observes an interpolated attribute.

The observer function will be invoked once during the next `$digest` following
compilation. The observer is then invoked whenever the interpolated value
changes.

@param {string} key Normalized key. (ie ngAttribute) .
@param {function(interpolatedValue)} fn Function that will be called whenever
                the interpolated value of the attribute changes.
       See the {@link guide/interpolation#how-text-and-attribute-bindings-work Interpolation
       guide} for more info.
@returns {function()} Returns a deregistration function for this observer.