code: function elementProperty(index, propName, value, sanitizer) {
      if (value === NO_CHANGE)
          return;
      var node = loadElement(index);
      var tNode = node.tNode;
      // if tNode.inputs is undefined, a listener has created outputs, but inputs haven't
      // yet been checked
      if (tNode && tNode.inputs === undefined) {
          // mark inputs as checked
          tNode.inputs = generatePropertyAliases(node.tNode.flags, 0 /* Input */);
      }
      var inputData = tNode && tNode.inputs;
      var dataValue;
      if (inputData && (dataValue = inputData[propName])) {
          setInputsForProperty(dataValue, value);
          markDirtyIfOnPush(node);
      }
      else {
          // It is assumed that the sanitizer is only added when the compiler determines that the property
          // is risky, so sanitization can be done without further checks.
          value = sanitizer != null ? sanitizer(value) : value;
          var native = node.native;
          ngDevMode && ngDevMode.rendererSetProperty++;
          isProceduralRenderer(renderer) ? renderer.setProperty(native, propName, value) :
              (native.setProperty ? native.setProperty(propName, value) :
                  native[propName] = value);
      }
  }
docs: Update a property on an Element.
  
  If the property name also exists as an input property on one of the element's directives,
  the component property will be set instead of the element property. This check must
  be conducted at runtime so child components that add new @Inputs don't have to be re-compiled.
  
  @param index The index of the element to update in the data array
  @param propName Name of property. Because it is going to DOM, this is not subject to
  renaming as part of minification.
  @param value New value to write.
  @param sanitizer An optional function used to sanitize the value.