<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" href="lib/style.css" />
<script src="lib/script.js"></script>
</head>
<body ng-app="plunker" ng-cloak>
<div ng-controller="MainCtrl">
<div class="slushbucket">
<div class="bucket">
<select class="bucket-select" ng-model="selectedFrom" multiple ng-options="item.value as item.label for item in options | filter:item.selected='false' | orderBy:'label'">
</select>
</div>
<div class="tools">
<button ng-click="select()">></button>
<button ng-click="unselect()"><</button>
</div>
<div class="bucket">
<select class="bucket-select" multiple ng-model="selectedTo" ng-options="item.value as item.label for item in options | filter:item.selected='true' | orderBy:'label'"></select>
</div>
</div>
<code><pre>{{options | json}}</pre></code>
</div>
</body>
</html>
import angular from 'angular';
angular.module('plunker', []).controller('MainCtrl', function($scope) {
$scope.selectedFrom = [];
$scope.selectedTo = [];
$scope.options = [
{
id: 1,
label: "Pepito el cretino",
value: "pepito",
selected: false,
},
{
id: 2,
label: "Juan el que no es cretino",
value: "juan",
selected: true,
},
{
id: 3,
label: "Pedro otro tipo mas",
value: "pedro",
selected: true,
},
{
id: 4,
label: "Fulano",
value: "fulano",
selected: true,
},
{
id: 5,
label: "Juan",
value: "juan_2",
selected: true,
}
];
$scope.select = () => {
const selectedObjs = $scope.options.filter(el => $scope.selectedFrom.includes(el.value));
for (let item of selectedObjs) {
item.selected = true;
$scope.selectedTo.push(item.value);
}
$scope.selectedFrom = [];
};
$scope.unselect = () => {
const selectedObjs = $scope.options.filter(el => $scope.selectedTo.includes(el.value));
for (let item of selectedObjs) {
item.selected = false;
$scope.selectedFrom.push(item.value);
}
$scope.selectedTo = [];
};
});
[ng\:cloak],
[ng-cloak],
[data-ng-cloak],
[x-ng-cloak],
.ng-cloak,
.x-ng-cloak {
display: none !important;
}
h1,
p {
font-family: sans-serif;
}
.slushbucket {
display: flex;
flex-direction: row;
gap: 10px;
}
.bucket {
height: 100%;
width: max-content;
min-width: 100px;
}
.bucket-select {
width: 100%;
}
.tools {
display: flex;
flex-direction: column;
gap: 10px;
height: 100%;
}
{
"name": "@plnkr/starter-angularjs",
"version": "1.0.1",
"description": "AngularJS starter template",
"dependencies": {
"angular": "^1.6.9"
},
"plnkr": {
"runtime": "system",
"useHotReload": false
}
}