使用 angular 动态预选下拉菜单
Dynamically preselected dropdowns with angular
在 javascript 中,我有两个对象数组,我正在尝试使用 angular.js:
在 html 中创建下拉菜单
$scope.members=[
{name: "Paul", position: "Vocals"},
{name: "John", position: "Guitar"},
{name: "George", position: "Guitar"},
{name: "Ringo", position: "Drums"}
];
$scope.positions=[
{label: "Guitar"},
{label: "Vocals"},
{label: "Drums"}
];
HTML:
<select>
<option ng-repeat="position in positions">
{{member.position}}
</option>
</select>
当前的HTML正在使用成员的位置并将其复制3次作为下拉列表中的唯一选项。例如,在加载页面时,Ringo 的位置在下拉列表中被预选为 "drums"(这是应该的方式)。但是当点击下拉菜单时,Ringo 的选项是 "drums" 和 "drums",以及 "drums"。它们应该是 "drums"、"vocals" 和 "guitar"。
有没有办法让所有选项都可用,并在加载时预先选择正确的选项?正确的指令是什么?
AngularJS 有一个专门用于 select 控件的指令。用它代替 ng-repeat
https://docs.angularjs.org/api/ng/directive/ngOptions
var app = angular.module('plunker', []);
app.controller("MyCtrl", function ($scope) {
$scope.members = [
{name: "Paul", position: "Vocals", alive: true},
{name: "John", position: "Guitar", alive: false},
{name: "George", position: "Guitar", alive: false},
{name: "Ringo", position: "Drums", alive: true}
];
$scope.positions = [
{label: "Guitar"},
{label: "Vocals"},
{label: "Drums"}
];
});
<!DOCTYPE html>
<html ng-app="plunker">
<head>
<script data-require="angular.js@1.3.x" src="https://code.angularjs.org/1.3.9/angular.js" data-semver="1.3.9"></script>
<script src="app.js"></script>
</head>
<body>
<div ng-controller="MyCtrl">
<ul>
<li ng-repeat="member in members">
{{member.name}}
<select ng-options="position.label as position.label for position in positions" ng-model="member.position"></select>
<input type="checkbox" ng-model="member.alive">Alive?</input>
</li>
</ul>
<pre>
{{members | json}}
</pre>
</div>
</body>
</html>
<select ng-model="selectedBeetle" ng-options="member as member.name for member in members"></select>
<select ng-model="selectedBeetle.position" ng-options="position.label for position in positions"></select>
在 javascript 中,我有两个对象数组,我正在尝试使用 angular.js:
在 html 中创建下拉菜单$scope.members=[
{name: "Paul", position: "Vocals"},
{name: "John", position: "Guitar"},
{name: "George", position: "Guitar"},
{name: "Ringo", position: "Drums"}
];
$scope.positions=[
{label: "Guitar"},
{label: "Vocals"},
{label: "Drums"}
];
HTML:
<select>
<option ng-repeat="position in positions">
{{member.position}}
</option>
</select>
当前的HTML正在使用成员的位置并将其复制3次作为下拉列表中的唯一选项。例如,在加载页面时,Ringo 的位置在下拉列表中被预选为 "drums"(这是应该的方式)。但是当点击下拉菜单时,Ringo 的选项是 "drums" 和 "drums",以及 "drums"。它们应该是 "drums"、"vocals" 和 "guitar"。
有没有办法让所有选项都可用,并在加载时预先选择正确的选项?正确的指令是什么?
AngularJS 有一个专门用于 select 控件的指令。用它代替 ng-repeat
https://docs.angularjs.org/api/ng/directive/ngOptions
var app = angular.module('plunker', []);
app.controller("MyCtrl", function ($scope) {
$scope.members = [
{name: "Paul", position: "Vocals", alive: true},
{name: "John", position: "Guitar", alive: false},
{name: "George", position: "Guitar", alive: false},
{name: "Ringo", position: "Drums", alive: true}
];
$scope.positions = [
{label: "Guitar"},
{label: "Vocals"},
{label: "Drums"}
];
});
<!DOCTYPE html>
<html ng-app="plunker">
<head>
<script data-require="angular.js@1.3.x" src="https://code.angularjs.org/1.3.9/angular.js" data-semver="1.3.9"></script>
<script src="app.js"></script>
</head>
<body>
<div ng-controller="MyCtrl">
<ul>
<li ng-repeat="member in members">
{{member.name}}
<select ng-options="position.label as position.label for position in positions" ng-model="member.position"></select>
<input type="checkbox" ng-model="member.alive">Alive?</input>
</li>
</ul>
<pre>
{{members | json}}
</pre>
</div>
</body>
</html>
<select ng-model="selectedBeetle" ng-options="member as member.name for member in members"></select>
<select ng-model="selectedBeetle.position" ng-options="position.label for position in positions"></select>