这看起来像是一见钟情的东西,但这样做的主要方法是使用optgroups和颜色很好地设计选择框。
以下是标记的简化示例:
<select ng-model="query.Statuses" multiple="" ng-bind-html="to_trusted(opts)">
</select>
和控制器:
app.controller('MainCtrl', function($scope, $sce) {
$scope.to_trusted = function(html_code) { return $sce.trustAsHtml(html_code); };
$scope.opts = '<option value="Draft">Draft</option>'+
'<option value="Pending">Pending</option>'+
'<option value="Live">Live</option>'+
'<option value="Deleted">Deleted</option>';
$scope.query = {
Statuses: ["Pending","Live"]
};
});
以下是plunker: http://plnkr.co/edit/Kv5xkl1KQVxgwGfnVpeZ?p=preview
如您所见,未选择所需的两个选项。
答案 0 :(得分:1)
为什么不在ng-repeat中运行你的选项?
$scope.opts = ['Draft', 'Live']; // etc
然后在你的HTML中
<option value="opt" ng-repeat="opt in opts">{{opt}}</option>
不使用ng-model,而是设置on blur或on change事件,触发函数以根据需要操作范围数组
答案 1 :(得分:0)
在控制器中设置HTML代码不是一个好习惯。您必须分离视图和控制器代码。 尝试在视图中使用ng-repeat包含模板选项标记,并使用javascript对象或关联数组在控制器中设置选项。
您也可以在select标签中使用ng-options,如下所述:https://docs.angularjs.org/api/ng/directive/select
答案 2 :(得分:0)
而不是使用ng-bind-html
或ng-repeat
为什么不坚持AngularJS如何使用select
ng-option
指令进行操作?
<强> FORKED DEMO 强>
<强> HTML 强>
<select ng-model="query.Statuses" multiple
ng-options="status for status in statuses"></select>
<强> JAVASCRIPT 强>
app.controller('MainCtrl', function($scope) {
$scope.statuses = ['Draft', 'Pending', 'Live', 'Archived', 'Deleted'];
$scope.query = { Statuses: ["Pending","Live"] };
});
或者,如果您希望有一个复杂的设置选项,其中您需要一些样式或禁用选项,那么您可以同时使用ng-repeat
和ng-selected
。
<强> DEMO 强>
<强> HTML 强>
<select ng-model="query.Statuses" multiple>
<option ng-repeat="status in statuses" value="{{status}}" ng-bind="status"
ng-selected="query.Statuses.indexOf(status) >= 0"></option>
</select>