Moderní webové aplikace
Transkript
Moderní webové aplikace
Moderní webové aplikace AngularJS Milan Lempera Víťa Plšek @milanlempera @winsik PHP -> Javascript PHP -> Java -> Javascript www.angular.cz @angular_cz ? vše si poskládat z knihoven použít framework AngularJS je framework Psal se rok 2009 … ano … 2009 ... Jak se tehdy tvořili webové aplikace ? ● pomocí server-side frameworků ● scriptování v jQuery Původním cílem AngularJS byl komerční framework ● náhrada stávajících view ● příklon k Single Page aplikacím Serverside VS SPA Serverside VS SPA požadavek 1.požadavek HTML - celá stránka aplikace požadavek požadavek na data HTML - konkrétní oblast data Šablonový systém v AngularJS <html ng-app> <head> <script src="https://…../angularjs/1.4.8/angular.min.js"></script> </head> <body> <h1>Ahoj {{city.name}}</h1> Upravit oslovení: <input type="text" ng-model="city.name" /> </body> </html> ukázka Directivy <span ng-if="user.enabled"> {{user.name}} </span> <tr ng-repeat="user in users"> <td>{{user.name}}</td> </tr> Dvoucestný databinding - milovaný i nenáviděný Dvoucestný databinding - milovaný i nenáviděný <h1>Ahoj {{city.name}}</h1> Upravit oslovení: <input type="text" ng-model="city.name" /> last value curent value changed? {{city.name}} “” “” false city.name (ngModelWatch) “” “” false Watcher Dvoucestný databinding - milovaný i nenáviděný <h1>Ahoj {{city.name}}</h1> Upravit oslovení: <input type="text" ng-model="city.name" /> last value curent value changed? {{city.name}} “” “Plzeň” true city.name (ngModelWatch) “” “Plzeň” true Watcher Dvoucestný databinding - milovaný i nenáviděný <h1>Ahoj {{city.name}}</h1> Upravit oslovení: <input type="text" ng-model="city.name" /> last value curent value changed? {{city.name}} “Plzeň” “Plzeň” false city.name (ngModelWatch) “Plzeň” “Plzeň” false Watcher Dvoucestný databinding - jak s ním žít − angular výrazy vyhodnocuje pokud se něco mohlo změnit ○ musí být rychlé ○ nemáte pod kontrolou počet volání − počet watcherů < ~2500 + výměnou za to můžete pracovat přímo s JS objekty + ve většině případů vám ušetří čas a kód Formuláře <form name="breweryForm"> <input id="brewery-year" type="number" name="year" ng-model="brewery.year" required /> </form> // angular vytvoří objekt breweryForm = { = { breweryForm.year $submitted: $dirty: false, false, $pristine: true, $dirty: false, $valid: false, $invalid: $pristine: true, true, $valid: false, $touched: false,$invalid: true, $error: {required: $untouched: true,Array[1]} } $error: { “number”: true “required”: true } } Dependency injection var UserStore = function() { this.httpService = HTTPService.getInstance(); } var UserStore = function(httpService) { this.httpService = httpService; } Dependency injection v angularu var BreweryServiceConstructor = function() { // služba řeší komunikaci se serverem } var BreweryController = function(breweryService) { this.breweries = breweryService.load(); }; angular.module("beerApp", []) .controller("BreweryController", BreweryController) .service("breweryService", BreweryServiceConstructor); Komunikace se serverem $http - základní rozhraní $resource - jednoduché pojetí RESTu var Brewery = $resource('/api/v1/brewery/:id', {id : '@id'}); var list = Brewery.query({'page' : 2}); // GET /api/v1/brewery var brewery42 = Brewery.get({id : 42}); // GET /api/v1/brewery/42 brewery42.name = 'Janáček'; brewery42.$save(); // POST /api/v1/brewery/42 brewery42.$delete(); // DELETE /api/v1/brewery/42 Promise step1(function (value1) { step2(value2, function(value3) { step3(value3, …. ); }); }); functionWithPromise() .then(promisedStep2) .then(function (value2) { // Do something }) .catch(function (error) { // Handle error from // all above steps }) Interceptory ratingService Server Intercetor přidat hodnocení 401 Unauthorized Modální přihlašovací okno požadavek na přihlášení Klient autentizační token přidat hodnocení (opakovaný požadavek) hodnocení přidáno (201 Created) Routing #/brewery controller: BreweryListController, templateUrl: brewery/list.html #/brewery/edit/:id controller: BreweryEditController, templateUrl: brewery/edit.html brewery/list.html nebo brewery/edit.html Vlastní elementy - directivy potřebujeme ● předat data ● reagovat na akce <brewery-form brewery="....." on-save="....." on-cancel="....."> </brewery-form> Vlastní elementy - directivy / komponenety var componentDefinitionObject = { templateUrl: "breweryForm.html", <brewery-form brewery="....." on-save="....." on-cancel="....."> </brewery-form> controller: controllerConstructor, bindings: { brewery: '=', onSave: '&', onCancel: '&' } }; angular.module('beerApp.breweryForm', []) .component("breweryForm", function() { return componentDefinitionObject; }) Proč si angular vybrat ● ● ● ● ● ● Výborná dokumentace Početná komunita Ucelený framework Oddělení kódu a html Velké množství komponent a knihoven Testovatelnost ○ ○ ngMock protractor Protractor - End to End testing for Angular ● nádstavba nad Seleniem ● přidává lokátory specifické pro Angular element(by.id('gobutton')); element(by.css('selected')); element(by.binding('user.name')); element(by.model('product.count')); element(by.repeater('product.count')); AngularJS přerostl své odvětví \ MOST POPULAR TECHNOLOGIES Stack Overflow - Developer Survey 2015 Kdy ho použít? Aplikace, aplikace aplikace ● informační systémy ● kalkulační nástroje ● … téměř cokoli za přihlášením Tam kde potřebujete vyměnit view a dokážete postavit REST API Kdy ho nepoužít? Z důvodu SEO Z důvodu výkonu ● klasické webové stránky ● vysoce dynamické aplikace ● “Excel” (není náhrada jQuery) ● inzerce, e-shopy ? Na co si dát pozor? ● množství a rychlost watcherů ● více aplikací na jedné stránce ● pište čistý kód ○ malé části kódu řešící jedem problém ● nespoléhejte na odstínění od javascriptu ○ prototypová dědičnost ○ promise ○ this ● dbejte na architekturu Kdo ho používá Youtube, PayPal, Mall, GoG, InvisionApp, Blue Origin, Lego Indiegogo, Docker, Best buy, NBA, Forbes, CNN, Weather... https://www.madewithangular.com Angular 2 ● první zmínky 5/2014 ● Designed for the future ● 2.0.0-beta.6 (2016-02-11) ● bude to úplně jiný framework Angular 2 - technologie ● psaný v TypeScriptu ● podpora pro ES5, ES6 i Dart ● používá RxJS (Reactive eXtension for JS) ○ a set of libraries to compose asynchronous and event-based programs using observable collections and Array#extras style composition in JS ○ funkcionální reaktivní programovní ○ developed by Microsoft Open Technologies, Inc. Budoucnost - 1.x vs 2.x ● datum vydání 2.0 - x / 2016 ● upgrade? ○ použití 1.x komponent v 2.x (ngUpgrade) ○ použítí 2.x komponent v 1.x (ngForward) ○ spokojeně pokračovat na 1.x Má smysl na něj čekat? ● rozhodně stojí za to ho sledovat Díky za pozornost ... Zdroje - www.angular.cz/moderni-web-16
Podobné dokumenty
Technické řešení komunikace s Evernote
vytvořenými přímo vývojáři Evernote. Nejedná se tedy o rozhraní, které trpí nějakými “mouchami“,
protože ty už byly odstraněny samotným Evernote týmem. Protokol umožňuje komunikaci
z libovolného ty...
Operaèní výzkum
Úlohy určitého typu mohou mít spousty různých instancí (konkrétních případů), které se liší
např. v konkrétních hodnotách číselných parametrů.
Instance úlohy je konkrétní případ úlohy, který je zad...
Dokumentace - Dušan Jenčík
na stejném stroji (počítač, server) jako webový systém, a proto nedochází k delším
latencím při přístupu.
Tím, že je oddělen obsah od aplikace, získáváme velikou flexibilitu hlavně při práci
v týmu...