<!DOCTYPE html>
<html ng-app="demo">

<head>
    <link rel="stylesheet" href="style.css">
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
    <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.16/angular.min.js"></script>
    <script src="script.js"></script>

</head>

<body ng-controller="MainController">

    <ul search-list=".letter" model="search.district">
        <li class="letter" ng-repeat="letter in alphabet.letter">{{ letter }}</li>
    </ul>

    <div class="container">

        <input id="q" type="text" ng-model="search.district " />
        
        <div ng-repeat="district in districts | filter:search:startsWith" class="district">
          
          <h4 class="district-name">{{ district.district }}</h4>
          <a href="{{ district.link }}">Some info</a>
          
          <ul class="district-cities">
            
            <li ng-repeat="city in district.cities ">
              {{ city }}
            </li>
          
          </ul>
          
          
        </div>

    </div>


</body>

</html>
// Code goes here

var app = angular.module('demo', []);
var controllers = {};
var alphabet = "abcdefghijklmnopqrstuvwxyz".split("");
var districtsArrayNotSorted = [
  {district:'Beta district',link:'#',cities:['Jordda','Mamba','Nemessis']},
	{district:'Berta district',link:'#',cities:['Rumba','Samba','Chacha']},
	{district:'Alpha district',link:'#',cities:['Zumbida','Kappa','Numba']},
	{district:'Gamma district',link:'#',cities:['Zapdos','Pikachu']}
];
var districtsArray = districtsArrayNotSorted.sort(function(a,b){
	var distrA = a.district.toLowerCase(), distrB = b.district.toLowerCase();
	if ( distrA > distrB) return 1
});


app.directive('searchList', function() {
    return {
        scope: {
            searchModel: '=model'
        },
        link: function(scope, element, attrs) {
            element.on('click', attrs.searchList, function() {
                scope.searchModel = $(this).text();
                scope.$apply();
            });
        }
    };
});

controllers.MainController = function($scope) {
  $scope.setTerm = function(letter) {
      $scope.search = letter;
  };
  $scope.alphabet = {
    letter: alphabet
  }
  
  $scope.districts = districtsArray;
  
  $scope.startsWith = function (actual, expected) {
    var lowerStr = (actual + "").toLowerCase();
    return lowerStr.indexOf(expected.toLowerCase()) === 0;
  }
};



app.controller(controllers);
/* Styles go here */

.letter {
  display: inline-block;
  width: 30px;
  height: 30px;
  margin-right: 5px;
  margin-bottom: 5px;
  border: solid 1px blue;
  border-radius: 50%;
  text-align: center;
  line-height: 30px;
  font-size: 16px;
  text-transform: uppercase;
  cursor: pointer;
}

.district {
  border: solid 1px red;
  margin: 10px 0;
  padding: 10px;
}