I am using Angular Material Design now. Everything works well as expected. Now I want to use AutoFill (Angular Material Design) with forced selection so that the user always selects something. There may be no login option, user can only select.
Does anyone know how to do this?
Angular Material Design Link:
https://material.angularjs.org/latest/#/demo/material.components.autocomplete
autoCompleteController.js
pocApp.controller('autoCompleteCtrl', function ($scope, $log, $mdDialog) { $scope.selectedItem; $scope.searchText; $scope.states = loadAll(); $scope.querySearch = querySearch; $scope.srchText; $scope.onItemChange = function (item) { $log.info(angular.toJson(item)); }; $scope.saveAutoComplete = function () { $log.info($scope.selectedItem); }; function querySearch(query) { var searchRes = []; angular.forEach($scope.states, function (state) { if (query === '') { searchRes.push(state); } else if (state.value.indexOf(query.toLowerCase()) === 0) { searchRes.push(state); } }); return searchRes; } function loadAll() { var allStates = 'Alabama, Alaska, Arizona, Arkansas, California, Colorado, Connecticut, Delaware,\ Florida, Georgia, Hawaii, Idaho, Illinois, Indiana, Iowa, Kansas, Kentucky, Louisiana,\ Maine, Maryland, Massachusetts, Michigan, Minnesota, Mississippi, Missouri, Montana,\ Nebraska, Nevada, New Hampshire, New Jersey, New Mexico, New York, North Carolina,\ North Dakota, Ohio, Oklahoma, Oregon, Pennsylvania, Rhode Island, South Carolina,\ South Dakota, Tennessee, Texas, Utah, Vermont, Virginia, Washington, West Virginia,\ Wisconsin, Wyoming'; return allStates.split(/, +/g).map(function (state) { return { value: state.toLowerCase(), display: state }; }); } function createFilterFor(query) { var lowercaseQuery = angular.lowercase(query); return function filterFn(state) { return (state.value.indexOf(lowercaseQuery) === 0); }; }});
autoComplete.html
<div ng-controller="autoCompleteCtrl"> <form name="frmGridMasterData2" novalidate style="padding: 30px"> <md-autocomplete flex required md-input-name="autocompleteField" md-min-length="0" md-input-minlength="2" md-input-maxlength="18" md-no-cache="true" md-selected-item="selectedItem" md-search-text="searchText" md-items="item in querySearch(searchText)" md-item-text="item.display" md-selected-item-change ="onItemChange(item)" md-select-on-match="true" md-autoselect="true" md-floating-label="Favorite state"> <md-item-template> <span md-highlight-text="searchText">{{item.display}}</span> </md-item-template> <div ng-messages="frmGridMasterData2.autocompleteField.$error" ng-if="frmGridMasterData2.autocompleteField.$touched"> <div ng-message="required">You <b>must</b> have a favorite state.</div> <div ng-message="minlength">Your entry is not long enough.</div> <div ng-message="maxlength">Your entry is too long.</div> </div> <md-not-found> No matches found for. </md-not-found> </md-autocomplete> <div class="row" style="padding-left: 10px"> <div class="col-md-12"> <md-button name="btnSaveAutoComplete" class="md-raised md-primary" ng-click="saveAutoComplete()" ng-disabled="frmGridMasterData2.$invalid">Save</md-button> </div> </div> </form> </div>