<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Example - example of angular multi-select</title>
<script src="//ajax.googleapis.com/ajax/libs/angularjs/1.4.5/angular.min.js"></script>
<script src="http://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.6.0/underscore-min.js"></script>
<script src="app.js"></script>
<link data-require="bootstrap-css" data-semver="3.3.1" rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.1/css/bootstrap.min.css" />
<link rel="stylesheet" type="text/css" href="style.css">
</head>
<body ng-app="staticSelect">
<div ng-controller="ExampleController">
<form name="myForm">
<div class="col-md-6">
<multi-select selected-items="selectedItems" options="options" field-name="Items" all-if-none="true"></multi-select>
</div>
</form>
</div>
</body>
</html>
(function(angular) {
'use strict';
angular.module('staticSelect', [])
.controller('ExampleController', ['$scope', function($scope) {
$scope.selectedItems = [];
$scope.options = [
{id: 0, nome: "Option A"},
{id: 1, nome: "Option B"},
{id: 2, nome: "Option C"}
];
}])
.directive('multiSelect', function() {
return {
restrict: 'E',
scope: {
selectedItems: '=',
options: '=',
fieldName: '@',
allIfNone: '='
},
template: "<div class='form-group'>" +
"<label class='item-label'>{{fieldName}}:</label>" +
"<select ng-model='item' ng-options='item.nome for item in options' ng-change='adicionaItem(item)' class='form-control combo-box'></select>" +
"</div>" +
"<div class='form-group'>" +
"<fieldset>" +
"<legend>{{fieldName}} selecionados</legend>" +
"<div class='input-form'>" +
"<span ng-show='!allIfNone && (!selectedItems || selectedItems.length == 0)' class='text-center'>Nenhuma item adicionado</span>" +
"<span ng-show='allIfNone && (!selectedItems || selectedItems.length == 0)' class='list-item-selecionado'>Todos</span>" +
"<span ng-repeat='selectedItem in selectedItems' class='list-item-selecionado'>{{selectedItem.nome}}" +
"<span ng-click='removeItemAdicionado(selectedItem)' class='glyphicon glyphicon-remove'>" +
"</span>" +
"</span>" +
"</div>" +
"</fieldset>" +
"</div>",
controller: function($scope) {
$scope.adicionaItem = function() {
if ($scope.selectedItems.length !== 0 && $scope.selectedItems[0].nome === 'Todos')
$scope.selectedItems = [];
var item = {
id: $scope.item.id,
nome: $scope.item.nome
};
$scope.removeItem($scope.options, item);
$scope.selectedItems.push(item);
$scope.selectedItems = _.sortBy($scope.selectedItems, 'nome');
$scope.item = undefined;
};
$scope.removeItemAdicionado = function(item) {
$scope.removeItem($scope.selectedItems, item);
$scope.adicionaItemRemovido(item);
};
$scope.adicionaItemRemovido = function(item) {
$scope.options.push(item);
$scope.options = _.sortBy($scope.options, 'nome');
};
$scope.removeItem = function(list, item) {
if (!item)
return;
for (var i = 0; i < list.length; i++) {
if (list[i] && list[i].nome === item.nome) {
list.splice(i, 1);
i--;
}
}
};
}
};
});
})(window.angular);
.list-item-selecionado {
padding: 5px 5px;
margin: 3px;
background-color: #EEE;
border-color: #EEE;
border-radius: 4px;
display: block;
float: left;
font-size: 12px;
}
.list-item-selecionado .glyphicon {
cursor: pointer;
}