{"id":515,"date":"2015-09-28T13:15:00","date_gmt":"2015-09-28T11:15:00","guid":{"rendered":"http:\/\/webowiec.net\/blog\/?p=515"},"modified":"2015-09-28T13:43:56","modified_gmt":"2015-09-28T11:43:56","slug":"recenzja-angularjs-poznaj-mozliwosci-angularjs-b-green-s-seshadri","status":"publish","type":"post","link":"https:\/\/webowiec.net\/blog\/recenzja-angularjs-poznaj-mozliwosci-angularjs-b-green-s-seshadri\/","title":{"rendered":"[RECENZJA] AngularJS &#8211; Poznaj mo\u017cliwo\u015bci AngularJS &#8211; B. Green, S. Seshadri"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/webowiec.net\/blog\/wp-content\/uploads\/2015\/09\/AngularJS_Shyam-Seshadri-Brad-Greenimages_big31978-83-246-9990-2.jpg\" alt=\"AngularJS_Shyam-Seshadri Brad-Green\" width=\"286\" height=\"410\" class=\"alignleft size-full wp-image-516\" srcset=\"https:\/\/webowiec.net\/blog\/wp-content\/uploads\/2015\/09\/AngularJS_Shyam-Seshadri-Brad-Greenimages_big31978-83-246-9990-2.jpg 286w, https:\/\/webowiec.net\/blog\/wp-content\/uploads\/2015\/09\/AngularJS_Shyam-Seshadri-Brad-Greenimages_big31978-83-246-9990-2-209x300.jpg 209w, https:\/\/webowiec.net\/blog\/wp-content\/uploads\/2015\/09\/AngularJS_Shyam-Seshadri-Brad-Greenimages_big31978-83-246-9990-2-98x140.jpg 98w\" sizes=\"auto, (max-width: 286px) 100vw, 286px\" \/><\/p>\n<p>Na nasz st\u00f3\u0142 redakcyjny trafi\u0142a ostatnio pozycja: &#8220;<strong>AngularJS &#8211; Poznaj mo\u017cliwo\u015bci AngularJS<\/strong>&#8220;, autorstwa: Brad Green i Shayam Seshadri. <\/p>\n<p>Postanowili\u015bmy si\u0119 nieco bli\u017cej przyjrze\u0107 tej pozycji i sprawdzi\u0107 czy sprawdzi si\u0119 ona jako <strong>podr\u0119cznik podczas pracy nad projektem Angular-owym<\/strong>. Zacznijmy wi\u0119c!<\/p>\n<p>Ju\u017c po kilku sekundach po otwarciu ksi\u0105\u017cki nasz\u0105 uwag\u0119 przyku\u0142 <strong>nietypowy uk\u0142ad margines\u00f3w<\/strong>. Czytaj\u0105c kolejne strony mamy wra\u017cenie, \u017ce kto\u015b chyba zapomnia\u0142 ustawi\u0107 poprawnych margines\u00f3w dedykowanych dla druku dwustronnego \ud83d\ude09 Tre\u015b\u0107 jest po prostu zbyt blisko \u0142\u0105cznika stron i trzeba si\u0119 nieco nagimnastykowa\u0107 aby komfortowo przeczyta\u0107 ca\u0142\u0105 linie tekstu. Dodatkowo specyficzny rozmiar podr\u0119cznika skutecznie uniemo\u017cliwia p\u0142ynne czytanie.<\/p>\n<p><strong>Nieco wi\u0119kszy rozmiar strony i reorganizacja margines\u00f3w by\u0142a by zdecydowanie zalecana.<\/strong><\/p>\n<p>&nbsp;<br \/>\n&nbsp;<br \/>\n&nbsp; <\/p>\n<h3>Za vs Przeciw<\/h3>\n<div class=\"row\">\n<div class=\"col-md-6\">\n<h4 class=\"green\"><i class=\"glyphicon glyphicon-ok\"><\/i> ZALETY<\/h4>\n<p>&#8211; prosty j\u0119zyk,<br \/>\n&#8211; wiedza podawana &#8220;w pigu\u0142ce&#8221;,<br \/>\n&#8211; du\u017co przyk\u0142ad\u00f3w,<br \/>\n&#8211; opis dodatkowych narz\u0119dzi,<br \/>\n&#8211; obszerny opis najwa\u017cniejszych modu\u0142\u00f3w.\n<\/p><\/div>\n<div class=\"col-md-6\">\n<h4 class=\"red\"><i class=\"glyphicon glyphicon-remove\"><\/i> WADY<\/h4>\n<p>&#8211; nieergonomiczny format ksi\u0105\u017cki,<br \/>\n&#8211; nieaktualna wersja frameworku,<br \/>\n&#8211; nieaktualne zalecenia (jQuery).\n<\/p><\/div>\n<\/div>\n<p><!--more--><\/p>\n<h3>Skoncentrujmy si\u0119 na zawarto\u015bci podr\u0119cznika<\/h3>\n<div class=\"alert alert-success\">\nPierwszy rozdzia\u0142, czyli wprowadzenie do AngularJS to najprawdopodobniej najlepiej napisany rozdzia\u0142 w ca\u0142ej ksi\u0105\u017cce \ud83d\ude09 <\/p>\n<p>Prosto, zwi\u0119\u017ale i na temat autorzy przedstawiaj\u0105 ide\u0119 frameworku, na konkretnym przyk\u0142adzie wyja\u015bniaj\u0105 takie poj\u0119cia: szablony, MVC, two-way binding, wstrzykiwanie zale\u017cno\u015bci, dyrektywy czy filtry. <\/p>\n<p>Kolejny rozdzia\u0142, jest ciekawym uzupe\u0142nieniem tego, czego nie da\u0142o si\u0119 przedstawi\u0107 we wst\u0119pie.\n<\/p><\/div>\n<p>Po przeczytaniu tylko pierwszych dw\u00f3ch rozdzia\u0142\u00f3w, czytelnik mo\u017ce zacz\u0105\u0107 ju\u017c pisanie pierwszej aplikacji, wykorzystuj\u0105c najwa\u017cniejsze sk\u0142adowe frameworka AngularJS. <\/p>\n<p>Jedyn\u0105 rzecz\u0105, do jakiej mo\u017ca si\u0119 doczepi\u0107 czytaj\u0105c pierwsze rozdzia\u0142y to u\u017cyta wersja frameworku. <strong>Aktualna wersja na wrzesie\u0144 2015 roku to 1.4.6<\/strong>, natomiast autorzy u\u017cywaj\u0105 wersji &#8220;legacy&#8221; 1.2.2. Nowa wersja nie wprowadza co prawda rewolucyjnych zmian, ale kilka nowo\u015bci czytelnika ominie, m.in. ulepszony modu\u0142 animacji, cookie, czy wzbogacona obs\u0142uga b\u0142\u0119d\u00f3w w formularzach. <\/p>\n<h3>Zalecenia, zalecenia, zalecenia&#8230;<\/h3>\n<p>Autorzy w dalszej cz\u0119\u015bci podr\u0119cznika zalecaj\u0105 stosowanie funkcji $watch, do obserwowania zmian w obiekcie. Nie jest to delikatnie m\u00f3wi\u0105c najlepsze rozwi\u0105zanie, szczeg\u00f3lnie, \u017ce w zdecydowanej wi\u0119kszo\u015bci przypadk\u00f3w istnieje szybsze rozwi\u0105zanie problemu reakcji na zmian\u0119 modelu &#8211; funkcje typu &#8220;setter&#8221;. Warto oczywi\u015bcie wspomnie\u0107 o tym rozwi\u0105zaniu, ale stwierdzenia typu:<\/p>\n<blockquote><p>\nfunkcja prawdopodobnie najcz\u0119\u015bciej u\u017cywana we wszystkich zasi\u0119gach to $watch\n<\/p><\/blockquote>\n<p>nie spowoduj\u0105 wdra\u017cania dobrych technik u pocz\u0105tkuj\u0105cych programist\u00f3w. <\/p>\n<p>Kolejnym zaleceniem autor\u00f3w, na kt\u00f3ry warto zwr\u00f3ci\u0107 uwag\u0119 to <strong>u\u017cycie jQuery<\/strong> to zarz\u0105dzania drzewem DOM w jednej aplikacji z AngularJS. <strong>Jest to sytuacja dozwolona ale mocno niezalecana<\/strong>, m.in. dlatego, \u017ce wymusza u\u017cycie w pewnych sytuacjach funkcji $watch, co negatywnie odbija sie na wydajno\u015bci aplikacji. <\/p>\n<div class=\"alert alert-info\">\nOd czasu, gdy w sieci zacz\u0119\u0142a si\u0119 pojawia\u0107 ca\u0142\u0105 masa popularnych jQuery-owych wtyczek przepisanych na Angular-a, pojawi\u0142y si\u0119 te\u017c zalecenia aby nie \u0142\u0105czy\u0107 obu bibliotek w 1 aplikacji.\n<\/div>\n<p>Jest jednak \u015bwiate\u0142ko w tunelu z\u0142ych zalece\u0144. Autorzy dok\u0142adnie wyja\u015bnili na czym polega problem u\u017cycia $watch. Pozostaje mie\u0107 nadziej\u0119, \u017ce czytelnicy odczytaj\u0105 to jako przestrog\u0119 przed cz\u0119stym u\u017cywaniem tej funkcji.<\/p>\n<div class=\"alert alert-info\">\nAutorzy zdecydowali si\u0119 wspomnie\u0107 o dodatkowych narz\u0119dziach takich jak: <strong>Yeoman<\/strong>, u\u0142atwiaj\u0105cego zarz\u0105dzanie aplikacj\u0105 AngularJS, czy <strong>Karma<\/strong>, pozwalaj\u0105ce na przyspieszenie pracy nad testowaniem aplikacji.\n<\/div>\n<h3>Warto przeczyta\u0107, bo&#8230;<\/h3>\n<p>Znalaz\u0142o si\u0119 te\u017c miejsce dla biblioteki RequireJS. Szukali\u015bmy r\u00f3wnie\u017c integracji z Bootstrap, ale niestety bez powodzenia, czytelnik b\u0119dzie musia\u0142 sam zapozna\u0107 si\u0119 z AngularUI.<\/p>\n<p>Niew\u0105tpliwym atutem ksi\u0105\u017cki jest om\u00f3wienie w wyczerpuj\u0105cy spos\u00f3b wzorca RESTful oraz modu\u0142u ngResource, s\u0142u\u017c\u0105ce do automatyzacji po\u0142\u0105cze\u0144 mi\u0119dzy przegl\u0105dark\u0105 a serwerem. <\/p>\n<p>Autorzy po\u015bwi\u0119caj\u0105 r\u00f3wnie\u017c kr\u00f3tki rozdzia\u0142 na przedstawienie tematyki bezpiecze\u0144stwa aplikacji, m.in. zagro\u017ce\u0144 typu CSRF &#8211; Cross-site request forgery.<\/p>\n<p>Dyrektywy, zosta\u0142y opisane w spos\u00f3b wyczerpuj\u0105cy. Podane przyk\u0142ady pozwalaj\u0105 w pe\u0142ni zrozumie\u0107 ich budow\u0119, bez odwo\u0142ywania si\u0119 do \u017ar\u00f3de\u0142 zewn\u0119trznych. <\/p>\n<p>Nie zabrak\u0142o oczywi\u015bcie odwo\u0142a\u0144 do takich zagadnie\u0144 jak: komunikacja pomi\u0119dzy zasi\u0119gami, us\u0142uga $location HTML5, obs\u0142uga COOKIE, modu\u0142 Sanitize itd.<\/p>\n<div class=\"alert alert-danger\">\n<strong>Ma\u0142e potkni\u0119cia zd\u0105\u017caj\u0105 si\u0119 najwi\u0119kszym, ale przy okazji recenzji warto te\u017c wspomnie\u0107 o liter\u00f3wkach \ud83d\ude09<\/strong><\/p>\n<p>Autorzy przy okazji omawiania atrybutu &#8220;ngStyle&#8221; u\u017cywaj\u0105 kodu: <code>style=\"((dowolne wyra\u017cenie}}\"<\/code>, na co pocz\u0105tkuj\u0105cy czytelnik mo\u017ce zareagowa\u0107 zak\u0142opotaniem. Na szcz\u0119\u015bcie p\u00f3\u017aniejsze przyk\u0142ady u\u017cywaj\u0105 ju\u017c poprawnej sk\u0142adni.<\/p>\n<p>Podobne niedopatrzenie to fragment, gdzie autorzy pisz\u0105 o znaku dolara przy walucie a na przyk\u0142adzie widoczny jest napis &#8220;12.90 z\u0142&#8221; \ud83d\ude09\n<\/p><\/div>\n<h3>Podsumowuj\u0105c<\/h3>\n<p>Ksi\u0105\u017cka &#8220;<strong>Poznaj mo\u017cliwo\u015bci AngularJS<\/strong>&#8221; opisuje w spos\u00f3b wystarczaj\u0105cy podstawy frameworka, umo\u017cliwiaj\u0105c czytelnikom napisanie swojej pierwszej \u015brednio zaawansowanej aplikacji, bez odsy\u0142ania do \u017ar\u00f3de\u0142 zewn\u0119trznych.<\/p>\n<p>Pomimo nieco nieaktualnych ju\u017c zalece\u0144, jak integracja z jQuery, zawiera informacje o ciekawych narz\u0119dziach i bibliotekach pozwalaj\u0105cych usprawni\u0107 prac\u0119 nad aplikacj\u0105 Angular-ow\u0105.<\/p>\n<p>Komu mo\u017cna <strong>poleci\u0107 ksi\u0105\u017ck\u0119: przede wszystkim pocz\u0105tkuj\u0105cym<\/strong> Angular-owcom, kt\u00f3rzy chc\u0105 pozna\u0107 mo\u017cliwo\u015bci frameworka, ale jednocze\u015bnie nie chc\u0105 si\u0119 skupia\u0107 na nowinkach czy niuansach. <\/p>\n<p><strong>Dla zaawansowanych<\/strong> czytelnik\u00f3w, polecamy <strong>inne, bardziej rozbudowane i aktualne pozycje<\/strong>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Na nasz st\u00f3\u0142 redakcyjny trafi\u0142a ostatnio pozycja: &#8220;AngularJS &#8211; Poznaj mo\u017cliwo\u015bci AngularJS&#8220;, autorstwa: Brad Green i Shayam Seshadri. Postanowili\u015bmy si\u0119 nieco bli\u017cej przyjrze\u0107 tej pozycji i sprawdzi\u0107 czy sprawdzi si\u0119 ona jako podr\u0119cznik podczas pracy nad projektem Angular-owym. Zacznijmy wi\u0119c! &hellip; <a href=\"https:\/\/webowiec.net\/blog\/recenzja-angularjs-poznaj-mozliwosci-angularjs-b-green-s-seshadri\/\" class=\"btn btn-sm btn-primary\"><i class=\"glyphicon glyphicon-link\"><\/i> Czytaj ca\u0142o\u015b\u0107<\/a><\/p>\n","protected":false},"author":1,"featured_media":516,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[681],"tags":[685,687,682,683,689,688,686,684],"class_list":["post-515","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-recenzje-ksiazek","tag-angular-js","tag-angular-ksiazki-recenzja","tag-angularjs","tag-brad-green","tag-helion-angular-js","tag-jakie-ksiazki-angular-js","tag-recenzja-angular-js","tag-shayam-seshadri"],"_links":{"self":[{"href":"https:\/\/webowiec.net\/blog\/wp-json\/wp\/v2\/posts\/515","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/webowiec.net\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/webowiec.net\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/webowiec.net\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/webowiec.net\/blog\/wp-json\/wp\/v2\/comments?post=515"}],"version-history":[{"count":9,"href":"https:\/\/webowiec.net\/blog\/wp-json\/wp\/v2\/posts\/515\/revisions"}],"predecessor-version":[{"id":526,"href":"https:\/\/webowiec.net\/blog\/wp-json\/wp\/v2\/posts\/515\/revisions\/526"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/webowiec.net\/blog\/wp-json\/wp\/v2\/media\/516"}],"wp:attachment":[{"href":"https:\/\/webowiec.net\/blog\/wp-json\/wp\/v2\/media?parent=515"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/webowiec.net\/blog\/wp-json\/wp\/v2\/categories?post=515"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/webowiec.net\/blog\/wp-json\/wp\/v2\/tags?post=515"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}