如何从自动选择所有选项的 ng-options 下拉列表中创建 "select all" 选项?
How do I create a "select all" option from an ng-options dropdown that automatically selects all of the options?
我想用一个选项填充我的 ng-options 下拉列表,当 selected 时,将 select 下拉列表中的所有可能选项。部分问题在于,在这种特定情况下,我不知道如何以编程方式 select 从现有 JSON 对象填充的选项。如何创建一个迭代当前对象的函数,然后将它们插入到一个函数中,当这个特定对象被 selected 时,该函数以编程方式 selects 它们?
代码
下面是示例 JSON 填充下拉列表的对象:
accounts = [
{
"Id": 2,
"DisplayName": "Bob",
},
{
"Id": 2,
"DisplayName": "George",
},
{
"Id": 2,
"DisplayName": "Michael",
},
]
这是我的 HTML 下拉代码:
<div class="form-group">
<label for="audience" class="col-sm-2 control-label">Audience</label>
<div class="col-sm-8">
<select id="audience" ng-model="newAnnouncement.audience"
ng-options="accountsData.DisplayName as accountsData.DisplayName for accountsData in accounts"
multiple >
<option value="">All</option>
</select>
</div>
<div class="col-sm-2 space">
</div>
</div>
在我的 component.js 文件中:
(function () {
'use strict';
angular.module('adminPanel')
.component('adminAnnouncements', {
templateUrl: 'app/admin-panel/admin-announcements/admin-announcements.html',
controller: [
'$scope', 'arcService',
function adminAnnouncementsController($scope, arcService) {
var my = this;
$scope.accounts = [];
my.$onInit = () => {
$scope.loadAccounts();
}
$scope.newAnnouncement = {
};
}
]
}
);}
)();
试炼与思考
我研究过尝试克隆 JSON 对象,然后将其设置为
的值
<option value="">All</option>.
因此,当全部 selected 时,它会突出显示所有选项。但是环顾四周后,我意识到你不能完全克隆一个 JSON 对象。我的另一个想法是用 javascript .push() 函数手动填充所有帐户对象的所有对象,但我希望这个函数是动态的,所以当创建一个新的帐户对象时,我不需要回来手动将accounts对象添加到all对象中。
在选项上添加点击处理程序:
<option value="" ng-click="$ctrl.all($event)">All</option>
即选择所有选项:
this.all = function(ev) {
this.audience = this.accounts.reduce((a,i)=>(a.push(i.DisplayName),a),[]);
};
angular.module("app",[])
.controller("ctrl",function() {
this.audience = [];
this.accounts = [
{"Id": 2,"DisplayName": "Bob",},
{"Id": 2,"DisplayName": "George",},
{"Id": 2,"DisplayName": "Michael",},
];
this.all = function(ev) {
this.audience = this.accounts.reduce((a,i)=>(a.push(i.DisplayName),a),[]);
};
})
<script src="//unpkg.com/angular/angular.js"></script>
<body ng-app="app" ng-controller="ctrl as $ctrl">
<select id="audience" ng-model="$ctrl.audience"
ng-options="o.DisplayName as o.DisplayName for o in $ctrl.accounts"
multiple >
<option value="" ng-click="$ctrl.all($event)">All</option>
</select>
<br>{{$ctrl.audience}}
</body>
我想用一个选项填充我的 ng-options 下拉列表,当 selected 时,将 select 下拉列表中的所有可能选项。部分问题在于,在这种特定情况下,我不知道如何以编程方式 select 从现有 JSON 对象填充的选项。如何创建一个迭代当前对象的函数,然后将它们插入到一个函数中,当这个特定对象被 selected 时,该函数以编程方式 selects 它们?
代码
下面是示例 JSON 填充下拉列表的对象:
accounts = [
{
"Id": 2,
"DisplayName": "Bob",
},
{
"Id": 2,
"DisplayName": "George",
},
{
"Id": 2,
"DisplayName": "Michael",
},
]
这是我的 HTML 下拉代码:
<div class="form-group">
<label for="audience" class="col-sm-2 control-label">Audience</label>
<div class="col-sm-8">
<select id="audience" ng-model="newAnnouncement.audience"
ng-options="accountsData.DisplayName as accountsData.DisplayName for accountsData in accounts"
multiple >
<option value="">All</option>
</select>
</div>
<div class="col-sm-2 space">
</div>
</div>
在我的 component.js 文件中:
(function () {
'use strict';
angular.module('adminPanel')
.component('adminAnnouncements', {
templateUrl: 'app/admin-panel/admin-announcements/admin-announcements.html',
controller: [
'$scope', 'arcService',
function adminAnnouncementsController($scope, arcService) {
var my = this;
$scope.accounts = [];
my.$onInit = () => {
$scope.loadAccounts();
}
$scope.newAnnouncement = {
};
}
]
}
);}
)();
试炼与思考
我研究过尝试克隆 JSON 对象,然后将其设置为
的值<option value="">All</option>.
因此,当全部 selected 时,它会突出显示所有选项。但是环顾四周后,我意识到你不能完全克隆一个 JSON 对象。我的另一个想法是用 javascript .push() 函数手动填充所有帐户对象的所有对象,但我希望这个函数是动态的,所以当创建一个新的帐户对象时,我不需要回来手动将accounts对象添加到all对象中。
在选项上添加点击处理程序:
<option value="" ng-click="$ctrl.all($event)">All</option>
即选择所有选项:
this.all = function(ev) {
this.audience = this.accounts.reduce((a,i)=>(a.push(i.DisplayName),a),[]);
};
angular.module("app",[])
.controller("ctrl",function() {
this.audience = [];
this.accounts = [
{"Id": 2,"DisplayName": "Bob",},
{"Id": 2,"DisplayName": "George",},
{"Id": 2,"DisplayName": "Michael",},
];
this.all = function(ev) {
this.audience = this.accounts.reduce((a,i)=>(a.push(i.DisplayName),a),[]);
};
})
<script src="//unpkg.com/angular/angular.js"></script>
<body ng-app="app" ng-controller="ctrl as $ctrl">
<select id="audience" ng-model="$ctrl.audience"
ng-options="o.DisplayName as o.DisplayName for o in $ctrl.accounts"
multiple >
<option value="" ng-click="$ctrl.all($event)">All</option>
</select>
<br>{{$ctrl.audience}}
</body>