<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>Example </title>
<!-- Compiled and minified CSS -->
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/materialize/0.97.6/css/materialize.min.css">
<script data-require="angular.js@1.3.20" data-semver="1.3.20" src="https://code.angularjs.org/1.3.20/angular.js"></script>
<script src="app.js"></script>
<script src="exampleController.js"></script>
<script src="exampleDirective.js"></script>
<link rel="stylesheet" type="text/css" href="style.css" />
</head>
<body ng-app="app">
<div class="container" ng-controller="ExampleController as exampleVm">
<h1>List of elements in grid</h1>
<div class="col s7">
<ul class="collection with-header">
<li class="collection-header row">
<div class="col s3">id</div>
<div class="col s3">Name</div>
<div class="col s3">Last Name</div>
<div class="col s3">Age</div>
</li>
<div class="list-scroll">
<li class="collection-item row" ng-class="person.select?'active':''" ng-repeat="person in exampleVm.list">
<div class="col s3">{{person.index}}</div>
<div class="col s3">{{person.name}}</div>
<div class="col s3">{{person.last}}</div>
<div class="col s3">{{person.age}}</div>
</li>
</div>
</ul>
<div class="input-field col s12">
<select class="browser-default" ng-model="exampleVm.row" ng-options="item as item.index for item in exampleVm.list">
<option value="">Select a row To scroll</option>
</select>
<button class="waves-effect waves-light btn" ng-click="exampleVm.view()">
select row {{exampleVm.row.index}}
</button>
</div>
</div>
</div>
</body>
</html>
/* Styles go here */
.list-scroll{
height: 200px;
overflow-y: scroll;
overflow-x: hidden;
list-style:none;
padding:0;
}
.active{
background: #546783;
color:#fff;
}
(function() {
'use strict';
angular.module('app', [])
})();
(function() {
'use strict';
angular.module('app')
.controller("ExampleController", ExampleController);
function ExampleController() {
var vm = this;
vm.row;
vm.view = view;
function view(){
vm.row.select = true;
}
vm.list = [{
"index": 0,
"isActive": false,
"picture": "http://placehold.it/32x32",
"age": 21,
"name": "Guzman",
"last": "Sharpe"
}, {
"index": 1,
"isActive": false,
"picture": "http://placehold.it/32x32",
"age": 29,
"name": "Carolyn",
"last": "Barrera"
}, {
"index": 2,
"isActive": true,
"picture": "http://placehold.it/32x32",
"age": 37,
"name": "Hanson",
"last": "Molina"
}, {
"index": 3,
"isActive": false,
"picture": "http://placehold.it/32x32",
"age": 24,
"name": "Park",
"last": "Golden"
}, {
"index": 4,
"isActive": true,
"picture": "http://placehold.it/32x32",
"age": 35,
"name": "Ola",
"last": "Shaw"
}, {
"index": 5,
"isActive": false,
"picture": "http://placehold.it/32x32",
"age": 31,
"name": "Koch",
"last": "Hamilton"
}, {
"index": 6,
"isActive": false,
"picture": "http://placehold.it/32x32",
"age": 26,
"name": "Goodwin",
"last": "Burton"
}, {
"index": 7,
"isActive": false,
"picture": "http://placehold.it/32x32",
"age": 38,
"name": "Angie",
"last": "Gray"
}, {
"index": 8,
"isActive": true,
"picture": "http://placehold.it/32x32",
"age": 39,
"name": "Waters",
"last": "Pate"
}, {
"index": 9,
"isActive": true,
"picture": "http://placehold.it/32x32",
"age": 38,
"name": "Evelyn",
"last": "Guthrie"
}, {
"index": 10,
"isActive": true,
"picture": "http://placehold.it/32x32",
"age": 34,
"name": "Mcleod",
"last": "Carson"
}, {
"index": 11,
"isActive": false,
"picture": "http://placehold.it/32x32",
"age": 37,
"name": "Hunt",
"last": "Bates"
}, {
"index": 12,
"isActive": true,
"picture": "http://placehold.it/32x32",
"age": 33,
"name": "Haley",
"last": "Stein"
}, {
"index": 13,
"isActive": false,
"picture": "http://placehold.it/32x32",
"age": 25,
"name": "Kelly",
"last": "Erickson"
}, {
"index": 14,
"isActive": true,
"picture": "http://placehold.it/32x32",
"age": 36,
"name": "Mcclain",
"last": "Gonzales"
}, {
"index": 15,
"isActive": true,
"picture": "http://placehold.it/32x32",
"age": 33,
"name": "Ina",
"last": "Salazar"
}, {
"index": 16,
"isActive": true,
"picture": "http://placehold.it/32x32",
"age": 25,
"name": "Logan",
"last": "Lyons"
}, {
"index": 17,
"isActive": false,
"picture": "http://placehold.it/32x32",
"age": 34,
"name": "Gaines",
"last": "Compton"
}, {
"index": 18,
"isActive": true,
"picture": "http://placehold.it/32x32",
"age": 27,
"name": "Myra",
"last": "Kennedy"
}];
}
})();
(function() {
'use strict';
function active($timeout) {
var directive = {
restrict: 'C',
link: link
};
function link(scope, element, attrs) {
scope.$watch('person.select', function(){
element[0].parentElement.scrollTop = element[0].offsetTop - element[0].offsetHeight - element[0].parentElement.offsetTop;
});
}
return directive;
}
active.$inject = ['$timeout'];
angular.module('app')
.directive("row", active);
})();