Добавление оптгрупп в angularjs оказывается сложным
Я использую angularjs, и последние 2 дня я пытался создать optgroup, работая над некоторыми другими вещами, и я в замешательстве. Мне пришлось создать ng-options, но я не рассматривал optgroup, пока не понял, что мне это нужно. Я попытался использовать ng-options, чтобы добавить его, но он либо игнорировал бы его полностью, либо испортил код, либо полностью игнорировал параметры.
Я понятия не имел, могу ли я на самом деле использовать (двойной) амперсанд, поэтому я попытался объединить оба параметра ng, но безрезультатно. Кроме того, я поиграл с конкретным кодом, найденным в odetocode (который казался многообещающим, но не мог быть включен в мой код из-за его собственной ограниченной структуры).
Все, что я пробовал, нарушает мой код. Оригинальный код приведен ниже (тот, что был до большинства моих многих других модов), но у меня также есть план для этого:
http://plnkr.co/edit/xCLe2GFShUMUlIySPLH9?p=info
HTML
<!DOCTYPE html>
<html ng-app="myApp">
<head>
<link rel="stylesheet" href="style.css">
<script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.2.19/angular.js"></script>
<script src="script.js"></script>
</head>
<body>
<form name="FORM" ng-controller="appController">
<the-ratings model="review.ratings">
</the-ratings>
</form>
</body>
</html>
JS
(function(){
var app = angular.module('myApp',[]);
app.controller('appController', ['$scope', function($scope) {
$scope.review = {};
$scope.review.ratings = '5 stars';
}])
app.directive('theRatings', function() {
return {
restrict: 'E',
scope: { model: '=' },
template: '<select ng-model="model" ng-options="option.name as option.value for option in options"></select>',
controller: function($scope) {
$scope.options = [
{ name:'test', namegroup: 'Rate the product', value:'test2',valueName: 'NA' },
{ name: '1 star', value: '1 star' },
{ name: '2 stars', value: '2 stars' },
{ name: '3 stars', value: '3 stars' },
{ name: '4 stars', value: '4 stars' },
{ name: '5 stars', value: '5 stars' }
];
}
};
});
})();
2 ответа
Не уверен, что вы хотите сгруппировать их, поэтому я добавил дополнительное свойство type
:
Синтаксис:
ng-options="option.name as option.value group by option.type for option in options"
Есть хороший пример этого в документах AngularJS, если вы хотите сгруппировать по атрибуту опций, вы можете добавить предложение group by. Например:
$scope.options = [
{ name:'test', namegroup: 'Rate the product', value:'test2',valueName: 'NA' },
{ type: 'one', name: '1 star', value: '1 star' },
{ type: 'one', name: '2 stars', value: '2 stars' },
{ type: 'two', name: '3 stars', value: '3 stars' },
{ type: 'two', name: '4 stars', value: '4 stars' },
{ type: 'two', name: '5 stars', value: '5 stars' }
];
и ng-варианты:
"option.name as option.value group by option.type for option in options"