code: function init () {
  
      $mdUtil.initOptionalProperties($scope, $attrs, {
        searchText: '',
        selectedItem: null,
        clearButton: false,
        disableVirtualRepeat: false,
      });
  
      $mdTheming($element);
      configureWatchers();
      $mdUtil.nextTick(function () {
  
        gatherElements();
        moveDropdown();
  
        // Forward all focus events to the input element when autofocus is enabled
        if ($scope.autofocus) {
          $element.on('focus', focusInputElement);
        }
        if ($scope.inputAriaDescribedBy) {
          elements.input.setAttribute('aria-describedby', $scope.inputAriaDescribedBy);
        }
        if (!$scope.floatingLabel) {
          if ($scope.inputAriaLabel) {
            elements.input.setAttribute('aria-label', $scope.inputAriaLabel);
          } else if ($scope.inputAriaLabelledBy) {
            elements.input.setAttribute('aria-labelledby', $scope.inputAriaLabelledBy);
          } else if ($scope.placeholder) {
            // If no aria-label or aria-labelledby references are defined, then just label using the
            // placeholder.
            elements.input.setAttribute('aria-label', $scope.placeholder);
          }
        }
      });
    }
docs: initialization methods 
  Initialize the controller, setup watchers, gather elements