How to have a default option in Angular.js select box
我在谷歌上搜索过,找不到任何相关信息。
我有这个密码。
1 2 3 | <select ng-model="somethingHere" ng-options="option.value as option.name for option in options" ></select> |
像这样的数据
1 2 3 4 5 6 7 | options = [{ name: 'Something Cool', value: 'something-cool-value' }, { name: 'Something Else', value: 'something-else-value' }]; |
输出是这样的。
1 2 3 4 5 6 7 8 | <select ng-model="somethingHere" ng-options="option.value as option.name for option in options" class="ng-pristine ng-valid"> <option value="?" selected="selected"></option> <option value="0">Something Cool</option> <option value="1">Something Else</option> </select> |
如何将数据中的第一个选项设置为默认值,以便得到这样的结果?
1 2 3 4 | <select ng-model="somethingHere" ....> <option value="0" selected="selected">Something Cool</option> <option value="1">Something Else</option> </select> |
你可以这样简单地使用ng init
1 2 3 4 | <select ng-init="somethingHere = options[0]" ng-model="somethingHere" ng-options="option.name for option in options"> </select> |
如果您想确保您的
1 2 3 4 | <select ng-model="somethingHere" ng-init="somethingHere = somethingHere || options[0].value" ng-options="option.value as option.name for option in options"> </select> |
试试这个:
HTML
1 2 3 4 | <select ng-model="selectedOption" ng-options="option.name for option in options"> </select> |
JavaScript
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | function Ctrl($scope) { $scope.options = [ { name: 'Something Cool', value: 'something-cool-value' }, { name: 'Something Else', value: 'something-else-value' } ]; $scope.selectedOption = $scope.options[0]; } |
这里是柱塞。
如果确实要设置将绑定到模型的值,则将
1 | ng-options="option.value as option.name for option in options" |
和javascript
1 2 | ... $scope.selectedOption = $scope.options[0].value; |
这里的另一个劫掠者正在考虑上述问题。
斯利瓦萨·哈里什·文卡塔拉马纳只有一个答案提到了
下面是一个示例,以及如何在Select
1 2 3 4 | <select ng-model="selectedCity" ng-options="city as city.name for city in cities track by city.id"> <option value="">-- Select City --</option> </select> |
如果
Here is Plunker for this:
有关详细信息,请参阅源文档:https://code.angularjs.org/1.3.15/docs/api/ng/directive/select
我认为,在包含"track by"之后,您可以在ng选项中使用它来获得所需的内容,如下所示
1 | <select ng-model="somethingHere" ng-options="option.name for option in options track by option.value"></select> |
这样做更好,因为当您想用对象列表替换字符串列表时,只需将其更改为
1 | <select ng-model="somethingHere" ng-options="object.name for option in options track by object.id"></select> |
当然,其中somethingere是一个具有属性名和ID的对象。请注意,"as"不用于表示ng选项,因为它只设置值,并且在使用track by时无法更改。
接受的答案使用
The only appropriate use of ngInit is for aliasing special properties
of ngRepeat, as seen in the demo below. Besides this case, you should
use controllers rather than ngInit to initialize values on a scope.
您也可以使用
1 2 3 4 5 | <select ng-model="foo"> <option ng-selected="$first" ng-repeat="(id,value) in myOptions" value="{{id}}"> {{value}} </option> </select> |
-----------------编辑--------------虽然这是可行的,但如果你知道要选择什么值,我更喜欢@mik-t的答案,https://stackoverflow.com/a/29564802/454252,它使用
只有当您必须选择第一个项目而不知道要选择什么值时,才应使用此答案。例如,我使用这个来自动完成,这需要一直选择第一个项目。
我的解决方案是使用HTML对默认选项进行硬编码。像这样:
哈姆:
1 2 3 | %select{'ng-model' => 'province', 'ng-options' =>"province as province for province in summary.provinces", 'chosen' =>"chosen-select", 'data-placeholder' =>"BC & ON"} %option{:value =>"", :selected =>"selected"} BC & ON |
在HTML中:
1 2 3 | <select ng-model="province" ng-options="province as province for province in summary.provinces" chosen="chosen-select" data-placeholder="BC & ON"> <option value="" selected="selected">BC & ON</option> </select> |
我希望我的默认选项返回我的API中的所有值,这就是为什么我有一个空值。也请原谅我的哈姆。我知道这不是直接回答OP的问题,但人们在谷歌上找到了这个答案。希望这能帮助别人。
使用下面的代码填充模型中选定的选项。
1 2 3 4 5 | <select id="roomForListing" ng-model="selectedRoom.roomName"> <option ng-repeat="room in roomList" title="{{room.roomName}}" ng-selected="{{room.roomName == selectedRoom.roomName}}" value="{{room.roomName}}">{{room.roomName}}</option> </select> |
根据您有多少个选项,您可以将值放入一个数组中并像这样自动填充选项。
1 2 3 | <select ng-model="somethingHere.values" ng-options="values for values in [5,4,3,2,1]"> <option value="">Pick a Number</option> </select> |
在我的例子中,我只需要插入一个初始值来告诉用户选择一个选项,所以我确实喜欢下面的代码:
1 2 3 | <select ... <option value="" ng-selected="selected">Select one option</option> </select> |
当我用这个值尝试一个选项时!=对于空字符串(空),选项被角替换,但是,当放置类似于该值的选项时(使用空值),使用该选项选择APEAR。
抱歉,我英语不好,希望我能帮上忙。
使用
有关更多
1 2 3 4 5 6 7 8 9 10 11 | angular.module('defaultValueSelect', []) .controller('ExampleController', ['$scope', function($scope) { $scope.data = { availableOptions: [ {id: '1', name: 'Option A'}, {id: '2', name: 'Option B'}, {id: '3', name: 'Option C'} ], selectedOption: {id: '2', name: 'Option B'} //This sets the default value of the select in the ui }; }]); |
1 2 3 4 5 6 7 8 9 10 11 | <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.5.0-rc.0/angular.min.js"> <body ng-app="defaultValueSelect"> <form name="myForm"> <label for="mySelect">Make a choice:</label> <select name="mySelect" id="mySelect" ng-options="option.name for option in data.availableOptions track by option.id" ng-model="data.selectedOption"></select> </form> <tt>option = {{data.selectedOption}}</tt><br/> |
plnkr.co公司
带角度数据绑定的html
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | (function(angular) { 'use strict'; angular.module('nonStringSelect', []) .run(function($rootScope) { $rootScope.model = { id: 2 }; }) .directive('convertToNumber', function() { return { require: 'ngModel', link: function(scope, element, attrs, ngModel) { ngModel.$parsers.push(function(val) { return parseInt(val, 10); }); ngModel.$formatters.push(function(val) { return '' + val; }); } }; }); })(window.angular); |
1 2 3 4 5 6 7 8 9 | <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.5.0-rc.1/angular.min.js"> <body ng-app="nonStringSelect"> <select ng-model="model.id" convert-to-number> <option value="1">One</option> <option value="2">Two</option> <option value="3">Three</option> </select> {{ model }} </body> |
plnkr.co公司
其他例子:1 2 3 4 5 6 7 8 9 | angular.module('defaultValueSelect', []) .controller('ExampleController', ['$scope', function($scope) { $scope.availableOptions = [ { name: 'Apple', value: 'apple' }, { name: 'Banana', value: 'banana' }, { name: 'Kiwi', value: 'kiwi' } ]; $scope.data = {selectedOption : $scope.availableOptions[1].value}; }]); |
1 2 3 4 5 6 7 8 | <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.5.0-rc.0/angular.min.js"> <body ng-app="defaultValueSelect"> <form name="myForm"> <select ng-model="data.selectedOption" required ng-options="option.value as option.name for option in availableOptions"></select> </form> </body> |
jsfiddle(jsfiddle)
这对我有用。
1 2 3 4 | <select ng-model="somethingHere" ng-init="somethingHere='Cool'"> <option value="Cool">Something Cool</option> <option value="Else">Something Else</option> </select> |
简单使用
1 2 3 4 | <select ng-model="myModel"> <option value="a" ng-selected="true">A</option> <option value="b">B</option> </select> |
为了回应本·乐的回答,应该有这条线
1 | ng-init="somethingHere = somethingHere || options[0]" |
而不是
1 | ng-init="somethingHere = somethingHere || options[0].value" |
也就是说,
1 2 3 4 | <select ng-model="somethingHere" ng-init="somethingHere = somethingHere || options[0]" ng-options="option.name for option in options track by option.value"> </select> |
在我的情况下,因为表单中的默认值因情况而异。我在select标记中添加了一个自定义属性。
1 2 3 4 | <select setSeletected="{{data.value}}"> <option value="value1"> value1.... <option value="value2"> value2.... ...... |
在指令中,我创建了一个检查值的脚本,当角填充该脚本时,将使用该值的选项设置为选中。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | .directive('setSelected', function(){ restrict: 'A', link: (scope, element, attrs){ function setSel=(){ //test if the value is defined if not try again if so run the command if (typeof attrs.setSelected=='undefined'){ window.setTimeout( function(){setSel()},300) }else{ element.find('[value="'+attrs.setSelected+'"]').prop('selected',true); } } } setSel() |
})
只是把这个从咖啡脚本中快速翻译出来的,至少它的jist是正确的,如果不是洞的东西。
这不是最简单的方法,但当值变化时就可以完成。
我会在控制器中设置模型。然后,选择将默认为该值。前任:HTML:
1 | <select ng-options="..." ng-model="selectedItem"> |
角度控制器(使用资源):
1 2 3 4 5 6 7 | myResource.items(function(items){ $scope.items=items; if(items.length>0){ $scope.selectedItem= items[0]; //if you want the first. Could be from config whatever } }); |
This working for me
1 | ng-selected="true" |
如果您有一些东西而不是只初始化日期部分,您可以使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | angular.module('myApp', []) .controller('myController', ['$scope', ($scope) => { $scope.allOptions = [ { name: 'Apple', value: 'apple' }, { name: 'Banana', value: 'banana' } ]; $scope.myInit = () => { $scope.userSelected = 'apple' // Other initiations can goes here.. } }]); <body ng-app="myApp"> <select ng-model="userSelected" ng-options="option.value as option.name for option in allOptions"></select> </body> |
如果您使用
1 | <select ng-options="list.key as list.name for list in lists track by list.id" ng-model="selectedItem"> |
因此,默认选择值与
试试你的角度控制器…
$someshinghere=name:'酷的东西'
您可以设置一个值,但您使用的是复杂类型,角度将搜索要在视图中设置的键/值。
如果不起作用,请尝试以下操作:ng options="options track by option.name中选项的option.value as option.name"
我需要默认的"请选择"是不可选择的。我还需要能够有条件地设置默认选择的选项。
我通过以下简单的方式实现了这一点:JS代码://翻转这两个选项以测试所选默认值或无默认值,并使用默认值"请选择"文本//$scope.defaultoption=0;$scope.defaultOption=键:"3",值:"选项3"
1 2 3 4 5 6 7 8 9 10 11 12 13 | $scope.options = [ { key: '1', value: 'Option 1' }, { key: '2', value: 'Option 2' }, { key: '3', value: 'Option 3' }, { key: '4', value: 'Option 4' } ]; getOptions(); function getOptions(){ if ($scope.defaultOption != 0) { $scope.options.selectedOption = $scope.defaultOption; } } |
HTML:
1 2 3 4 | <select name="OptionSelect" id="OptionSelect" ng-model="options.selectedOption" ng-options="item.value for item in options track by item.key"> <option value="" disabled selected style="display: none;"> -- Please Select -- </option> </select> You selected: {{options.selectedOption.key}} |
我希望这能帮助其他有类似要求的人。
"请选择"是通过Joffrey Outtier的回答完成的。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <!-- Using following solution you can set initial default value at controller as well as after change option selected value shown as default. --> <script type="text/javascript"> function myCtrl($scope) { //... $scope.myModel=Initial Default Value; //set default value as required //.. } <select ng-model="myModel" ng-init="myModel= myModel" ng-options="option.value as option.name for option in options"> </select> |
我想最简单的方法是
1 | ng-selected="$first" |
这里解释的最好和最简单的方法(更新)https://stackoverflow.com/a/37962911/5902146