Top Banner
Mobile Development with AngularJS +Kees de Kooter Wednesday, July 3, 13
24

Dutch angularjs

Apr 22, 2015

Download

Technology

Kees de Kooter

 
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Dutch angularjs

Mobile Development with AngularJS

+Kees de Kooter

Wednesday, July 3, 13

Page 2: Dutch angularjs

Wednesday, July 3, 13

Page 3: Dutch angularjs

Wednesday, July 3, 13

Page 4: Dutch angularjs

“The Web is the platform”

Wednesday, July 3, 13

Page 5: Dutch angularjs

<html>

Wednesday, July 3, 13

Page 6: Dutch angularjs

Wednesday, July 3, 13

Page 7: Dutch angularjs

Wednesday, July 3, 13

Page 8: Dutch angularjs

A Different Ballgame

• fixed viewport

• limited screen real estate

• no keyboard & mouse - touch!

Wednesday, July 3, 13

Page 9: Dutch angularjs

Design Choices

• Native L&F

• Cross-Platformy?

• Custom?

Wednesday, July 3, 13

Page 10: Dutch angularjs

Wednesday, July 3, 13

Page 11: Dutch angularjs

The Stack

• Twitter Bootstrap CSS

• FontAwesome icons

• AngularJS

• flot for graphs

• Existing Java-Spring backend

Wednesday, July 3, 13

Page 12: Dutch angularjs

Navigation

Wednesday, July 3, 13

Page 13: Dutch angularjs

Directives

<div class="row-fluid met-navbar"> <a class="met-toolbar-button met-float-left" href="#/" met-toolbar-button-active> <div class="met-toolbar-icon icon-home"></div> </a> <a class="met-toolbar-button met-float-left" href="#/history/" met-toolbar-button-active> <div class="met-toolbar-icon icon-archive"></div> </a> <a class="met-toolbar-button met-float-left" href="#/open-invoices/" met-toolbar-button-active> <div class="met-toolbar-icon icon-euro"></div> </a></div>

Wednesday, July 3, 13

Page 14: Dutch angularjs

metronomeApp.directive("metToolbarButtonActive", ['$location', function (location) {

return function (scope, element, attrs) { var buttonHref = attrs.href.substr(1); scope.location = location; scope.$watch('location.path()', function (path) { if (path === buttonHref) { element.addClass("met-toolbar-button-active"); } else { element.removeClass("met-toolbar-button-active"); } }); };

}]);

Wednesday, July 3, 13

Page 15: Dutch angularjs

Dialogs

Wednesday, July 3, 13

Page 16: Dutch angularjs

<div class="container-fluid" met-show-app-header> <div class="met-header"> <div class="row-fluid"> <div class="span12 header"> <div met-header-logo></div> <div class="met-header-title ng-cloak">{{title}}</div> <div class="met-float-right"> <a id="addActivity" met-show-navigation                       class="icon-edit" href="#/edit-activity"></a> </div> </div> </div>

Wednesday, July 3, 13

Page 17: Dutch angularjs

Data entry(demo)

Wednesday, July 3, 13

Page 18: Dutch angularjs

Context Menu

Wednesday, July 3, 13

Page 19: Dutch angularjs

Instant Update

Wednesday, July 3, 13

Page 20: Dutch angularjs

// Activity Controller

$scope.save = function () { $http.put('/metronome/m/activity', $scope.activity).then(function () { $rootScope.$broadcast("activitySaved"); window.history.back(); });};

// Home Controller

$rootScope.$on("activitySaved", function () { $scope.refresh();});

Wednesday, July 3, 13

Page 21: Dutch angularjs

Security

Wednesday, July 3, 13

Page 22: Dutch angularjs

$httpProvider.responseInterceptors.push(function ($rootScope, $q) { return function (promise) { return promise.then( //success -> don't intercept function (response) { return response; }, //error -> if 401 broadcast an event function (response) { if (response.status === 401) {

... var deferred = $q.defer(), req = { config: response.config, deferred: deferred }; $rootScope.$broadcast('event:loginRequired'); return deferred.promise; } return $q.reject(response); } ); }; });

Wednesday, July 3, 13

Page 23: Dutch angularjs

$rootScope.$on('event:loginRequired', function () { window.location.href = '/metronome/login.page';});

Wednesday, July 3, 13

Page 24: Dutch angularjs

https://metronome.nlFree for single use

Wednesday, July 3, 13