I have a <select>
in a form with other fields, like so-
<form class="formCSS">
<div class="inputs">
<label class="labelTag">Name *:   </label>
<select class="inputTag" ng-model="selectedName"
ng-options="n.name for n in adminNames"></select>
</div>
</form>
adminChannels
is an object array of this structure {_id:"....", name:"..."}
When I "transitionTo" this state, I pass a name (which exists in adminNames too) like so -
$state.go('schedule',{name:response.name});
I want the said name (accessed using $scope.name
) to be pre-selected when this template loads.
I tried something like this -
ng-init = "selectedName=adminNames[adminNames.indexOf(name)]"
I do get the auto-populated drop-down menu but nothing gets selected as default.
I went through all other posts about selecting default options, none of them provide info about pre-selecting using $scope variable.
Please let me know if I've to provide any more info/code. Thanks in advance!
Use Array.find() :
$scope.selectedName = $scope.adminNames.find( x => (x.name == $scope.name));
The find()
method returns the value of the first element in the array that satisfies the provided testing function.
Another approach is to use the as
clause in the ng-options
directive:
<select class="inputTag" ng-model="selectedName"
ng-options="n.name as n.name for n in adminNames">
</select>
The DEMO
angular.module("app",[]) .controller("ctrl",function($scope) { $scope.adminNames=[ {name: "fred"}, {name: "jane"}, {name: "sally"}, ]; $scope.selectedName="jane"; $scope.find = function(name) { return $scope.adminNames.find( x => (x.name == name)); }; });
<script src="//unpkg.com/angular/angular.js"></script> <body ng-app="app" ng-controller="ctrl"> <select class="inputTag" ng-model="selectedName" ng-options="n.name as n.name for n in adminNames"> </select> <br> object = {{find(selectedName)}} </body>
For more information, see
When I started debugging stage-by-stage, I saw that adminNames[adminNames.indexOf(name)]
was "undefined".
So I did this in the controller instead, to find the index of the $scope.name that is received -
var index = $scope.adminNames.map(function(e) { return e.name; }).indexOf($scope.name);
$scope.selectedName = $scope.adminNames[index];
This SO question/answer helped me figure this out.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.