5
This commit is contained in:
		
							parent
							
								
									ed4ca38457
								
							
						
					
					
						commit
						dd4fedc167
					
				
					 1 changed files with 111 additions and 0 deletions
				
			
		| 
						 | 
					@ -144,3 +144,114 @@ The AngularJS application is organized using modules. We can think of modules as
 | 
				
			||||||
I have created a separate module for controllers(travelExpensesControllers) and one for services(travelExpensesApp.services). I have also used some libraries as modules like : ngRoute (from angular-route.js), mgCrea.ngStrap (from angular-strap.js) and ui.utils.masks (from angular-input-masks-standalone.min.js). The module declarations links everything together and creates the base of the app.
 | 
					I have created a separate module for controllers(travelExpensesControllers) and one for services(travelExpensesApp.services). I have also used some libraries as modules like : ngRoute (from angular-route.js), mgCrea.ngStrap (from angular-strap.js) and ui.utils.masks (from angular-input-masks-standalone.min.js). The module declarations links everything together and creates the base of the app.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Beside modules the above screenshot contains the configuration of routing. Using ngRoute lets us use routing which helps us a lot to define a nice and clear structure for the frontend app. AngularJS routing permits a good separation of concerns. GUI resides in html templates defined by the templateUrls and the logic behind is separated in the controller javascript files.
 | 
					Beside modules the above screenshot contains the configuration of routing. Using ngRoute lets us use routing which helps us a lot to define a nice and clear structure for the frontend app. AngularJS routing permits a good separation of concerns. GUI resides in html templates defined by the templateUrls and the logic behind is separated in the controller javascript files.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					To understand a bit better let's take a look on the trips page which is built up from trips.html as template and TripsControl as controller:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```HTML5
 | 
				
			||||||
 | 
					<div class="navbar navbar-inverse">
 | 
				
			||||||
 | 
					    <div class="navbar-header pull-left">
 | 
				
			||||||
 | 
					        <button type="button" class="btn-lx-hamburger navbar-toggle pull-left" data-toggle="collapse" data-target="#myNavbar" bs-aside="aside" data-template-url="partials/aside.html" data-placement="left" data-animation="am-slide-left" data-container="body">
 | 
				
			||||||
 | 
					            <span class="icon-bar"></span>
 | 
				
			||||||
 | 
					            <span class="icon-bar"></span>
 | 
				
			||||||
 | 
					            <span class="icon-bar"></span>
 | 
				
			||||||
 | 
					        </button>
 | 
				
			||||||
 | 
					        <a class="navbar-brand padding-rl10">
 | 
				
			||||||
 | 
					            <span class="glyphicon glyphicon-user"></span> {{employeeData.first_name}} {{employeeData.last_name}}
 | 
				
			||||||
 | 
					        </a>            
 | 
				
			||||||
 | 
					    </div>
 | 
				
			||||||
 | 
					    <div class="navbar-header pull-right">
 | 
				
			||||||
 | 
					        <a class="navbar-brand" ng-disabled="true" ng-click="newTravel()"><span class="glyphicon glyphicon-plus"></span></a>
 | 
				
			||||||
 | 
					    </div>
 | 
				
			||||||
 | 
					</div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					<div class="container">
 | 
				
			||||||
 | 
					    <div waithttp ng-show="!waitingHttp">
 | 
				
			||||||
 | 
					        <div class="table-responsive">
 | 
				
			||||||
 | 
					            <table class="table table-striped">
 | 
				
			||||||
 | 
					                <thead>
 | 
				
			||||||
 | 
					                <tr>
 | 
				
			||||||
 | 
					                    <th>Datum</th>
 | 
				
			||||||
 | 
					                    <th>Von</th>
 | 
				
			||||||
 | 
					                    <th>Nach</th>
 | 
				
			||||||
 | 
					                </tr>
 | 
				
			||||||
 | 
					                </thead>
 | 
				
			||||||
 | 
					                <tbody>
 | 
				
			||||||
 | 
					                <tr ng-repeat="trip in trips | orderBy : departure_date : reverse" ng-click="editTravel(trip.id)">
 | 
				
			||||||
 | 
					                    <td>
 | 
				
			||||||
 | 
					                        {{ trip.departure_date | date : 'dd.MM.yyyy'}}
 | 
				
			||||||
 | 
					                    </td>
 | 
				
			||||||
 | 
					                    <td>
 | 
				
			||||||
 | 
					                        {{ trip.departure }}
 | 
				
			||||||
 | 
					                    </td>
 | 
				
			||||||
 | 
					                    <td>
 | 
				
			||||||
 | 
					                        {{ trip.destination }}
 | 
				
			||||||
 | 
					                    </td>
 | 
				
			||||||
 | 
					                </tr>
 | 
				
			||||||
 | 
					                </tbody>
 | 
				
			||||||
 | 
					            </table>
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
 | 
					    </div>
 | 
				
			||||||
 | 
					</div>
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					The above html contains a navbar and a simple list of trips. What we notice from the start are the double bracelets (e.g. '{{ trip.departure }}') and directives starting with "ng" prefix. These are the main ways how the template interacts with the controller :
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					```javascript
 | 
				
			||||||
 | 
					(function () {
 | 
				
			||||||
 | 
					    "use strict";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    angular.module("travelExpensesControllers").controller("TripsControl", ["$scope", "$http", "$routeParams", "$location","global", TripsControl]);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    function TripsControl($scope, $http, $routeParams, $location, global) {
 | 
				
			||||||
 | 
					        $scope.companyId = $routeParams.companyId;
 | 
				
			||||||
 | 
					        $scope.employeeId = $routeParams.employeeId;
 | 
				
			||||||
 | 
					        $scope.employeeData = global.user.employeeData;
 | 
				
			||||||
 | 
					        $scope.aside = {
 | 
				
			||||||
 | 
					            "title" : global.user.employeeData.first_name + " " + global.user.employeeData.last_name
 | 
				
			||||||
 | 
					        };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        var tripsRequest = {
 | 
				
			||||||
 | 
					            method  : "GET",
 | 
				
			||||||
 | 
					            url     : global.baseUrl + "companies/" + $scope.companyId + "/employees/" + $scope.employeeId + "/trips",
 | 
				
			||||||
 | 
					            headers : {
 | 
				
			||||||
 | 
					                "Content-Type": "application/hal+json",
 | 
				
			||||||
 | 
					                "Session-Id": global.sessionId
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        $http(tripsRequest).then(
 | 
				
			||||||
 | 
					            function (data) {
 | 
				
			||||||
 | 
					                $scope.trips = data.data.ResourceList;
 | 
				
			||||||
 | 
					            },
 | 
				
			||||||
 | 
					            function (data) {
 | 
				
			||||||
 | 
					                $scope.error = data;
 | 
				
			||||||
 | 
					                // session probably bad, go back to login page
 | 
				
			||||||
 | 
					                $location.path("/");
 | 
				
			||||||
 | 
					            });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        $scope.newTravel = function () {
 | 
				
			||||||
 | 
					            delete global.tripDetails;
 | 
				
			||||||
 | 
					            var url = "/companies/" + global.user.companyData.id + "/employees/" + global.user.employeeData.id + "/trips/0";
 | 
				
			||||||
 | 
					            $location.url(url);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        $scope.editTravel = function (travelId) {
 | 
				
			||||||
 | 
					            var url = "/companies/" + global.user.companyData.id + "/employees/" + global.user.employeeData.id + "/trips/" + travelId;
 | 
				
			||||||
 | 
					            $location.url(url);
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        $scope.doLogout = function () {
 | 
				
			||||||
 | 
					            $location.path("/").search({invalidate: true});
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					})();
 | 
				
			||||||
 | 
					```
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					Above  we can see how the TripsControl is defined . To expose something usable in the template we just exetend/add a new property or function to the $scope variable. For example we get the list of trips if we have a successfull answer for a $http request defined by js var tripsRequest.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					In a nutshell this is how angular works  and used in this POC.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### What else ?
 | 
				
			||||||
 | 
					Since the most of the time during this POC I have worked with AngularJS you might wondering if I had to implement something else which is worth mentioning.
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue