{"id":10028,"date":"2021-12-23T16:49:37","date_gmt":"2021-12-23T15:49:37","guid":{"rendered":"https:\/\/vived.io\/frontend-thursday-vol-69-blitz-js-ember-4-0-typowane-formularze-dla-angulara\/"},"modified":"2022-09-19T13:16:34","modified_gmt":"2022-09-19T11:16:34","slug":"frontend-thursday-vol-69-blitz-js-ember-4-0-typowane-formularze-dla-angulara","status":"publish","type":"post","link":"https:\/\/vived.io\/pl\/frontend-thursday-vol-69-blitz-js-ember-4-0-typowane-formularze-dla-angulara\/","title":{"rendered":"Frontend Thursday vol. 69 &#8211; Blitz.js, Ember 4.0, typowane formularze dla Angulara"},"content":{"rendered":"\n<h2 id=\"1-pivot-blitz-js\" data-num=1>1. Pivot Blitz.js<\/h2>\n\n\n\n<p>Blitz.js to framework oparty o Reacta przy pomocy kt\u00f3rego tworzy\u0107 mo\u017cna fullstackowe aplikacje. Dzi\u0119ki zamkni\u0119ciu wewn\u0105trz jednego narz\u0119dzia zar\u00f3wno frontendu jak i backendu, ca\u0142o\u015b\u0107 tworzy mocno monolityczn\u0105 architektur\u0119. To z kolei pozwala programistom zapomnie\u0107 o komunikacji pomi\u0119dzy aplikacj\u0105 klienck\u0105, a serwerem i pisa\u0107 frontendowe komponenty tak jakby mia\u0142y bezpo\u015bredni dost\u0119p do bazy danych.\u00a0<\/p>\n\n\n\n<p>Tw\u00f3rca Blitz.js w zesz\u0142ym tygodniu og\u0142osi\u0142 pivot frameworku. W nadchodz\u0105cych miesi\u0105cach porzucony zostanie fork Next.js, o kt\u00f3rego opiera\u0142o si\u0119 ca\u0142e rozwi\u0105zanie. Sam framework zostanie przepisany, w taki spos\u00f3b, aby wsp\u00f3\u0142pracowa\u0107 w\u0142a\u015bciwie z dowolnym narz\u0119dziem do renderowania po stronie serwera. W podlinkowanym RFC opr\u00f3cz Next.js wspomniany\u00a0 jest r\u00f3wnie\u017c Remix i SvelteKit, ale nie jest to zamkni\u0119ta lista.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"503\" height=\"496\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/12\/5yw03m.jpeg\" alt=\"\" class=\"wp-image-3508\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/12\/5yw03m.jpeg 503w, https:\/\/vived.io\/wp-content\/uploads\/2021\/12\/5yw03m-300x296.jpeg 300w\" sizes=\"auto, (max-width: 503px) 100vw, 503px\" \/><\/figure><\/div>\n\n\n\n<p>Ci\u0119\u017cko odm\u00f3wi\u0107 racjonalno\u015bci podj\u0119tym decyzjom. Pomimo pocz\u0105tkowego szybkiego wzrostu popularno\u015bci frameworku, w ci\u0105gu ostatniego roku Blitz.js tygodniowo pobierany by\u0142 oko\u0142o 5000 razy, gdzie Next.js mia\u0142 tych pobra\u0144 ponad 2 miliony. Po ponad dw\u00f3ch latach trwania projektu oczywistym staje si\u0119, \u017ce podj\u0119cie walki z rynkowym gigantem b\u0119dzie niemo\u017cliwe, a znaleziona nisza zbyt ma\u0142a, \u017ceby utrzyma\u0107 projekt przy \u017cyciu. Je\u015bli tw\u00f3rcom Blitz.js rzeczywi\u015bcie uda si\u0119 stworzy\u0107 narz\u0119dzie niezale\u017cne od frameworku i przy tym zachowa\u0107 obecny Developer Experience to rynek potencjalnych klient\u00f3w zdecydowanie si\u0119 poszerzy.<\/p>\n\n\n\n<p>Je\u015bli jeste\u015bcie zainteresowani tym jak b\u0119dzie wygl\u0105da\u0107 nowe wcielenie Blitz.js, to w zalinkowanym\u00a0 poni\u017cej RFC znajdziecie kr\u00f3tki szkic nowej architektury. Na razie na pr\u00f3\u017cno szuka\u0107 konkretnych deklaracji i termin\u00f3w ze strony tw\u00f3rc\u00f3w. Osobi\u015bcie trzymam kciuki za projekt i z przyjemno\u015bci\u0105 przekonam si\u0119 czy znajdzie on dla siebie sta\u0142e miejsce na rynku.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u0179r\u00f3d\u0142a:<\/h3>\n\n\n\n<p><a href=\"https:\/\/github.com\/blitz-js\/blitz\/discussions\/3075\">https:\/\/github.com\/blitz-js\/blitz\/discussions\/3075<\/a><br><a href=\"https:\/\/www.reddit.com\/r\/javascript\/comments\/rixypj\/blitz_is_pivoting_what_do_you_think\/\">https:\/\/www.reddit.com\/r\/javascript\/comments\/rixypj\/blitz_is_pivoting_what_do_you_think\/<\/a><\/p>\n\n\n\n<h2 id=\"2-ember-4-0\" data-num=2>2. Ember 4.0<\/h2>\n\n\n\n<p>Tu\u017c przed \u015bwi\u0119tami mamy dobre wie\u015bci dla wszystkich fan\u00f3w Embera (je\u015bli nie jest to ju\u017c gatunel wymar\u0142y)\u00a0 &#8211; w minionym tygodniu ukaza\u0142a si\u0119 finalna wersja 4.0 tego frameworka. Z notatki towarzysz\u0105cej wydaniu dowiadujemy si\u0119 r\u00f3wnie\u017c, \u017ce wersja 3.28 oznaczona zosta\u0142a jako LTS oraz, \u017ce wersja 4.0 nie zawiera istotnych nowo\u015bci. Zmiana numerka z przodu zwi\u0105zana jest z porzuceniem nie wspieranych ju\u017c API.\u00a0<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"480\" height=\"400\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/12\/giphy-3.gif\" alt=\"\" class=\"wp-image-3509\"\/><figcaption>Pomy\u015ble\u0107 tylko, \u017ce ja narzekam na brak nowo\u015bci w kolejnych wersjach Reacta i Angulara\u2026<\/figcaption><\/figure><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">\u0179r\u00f3d\u0142a:<\/h3>\n\n\n\n<p><a href=\"https:\/\/blog.emberjs.com\/ember-4-0-released\/\">https:\/\/blog.emberjs.com\/ember-4-0-released\/<\/a><\/p>\n\n\n\n<h2 id=\"3-typowane-formularze-dla-angulara\" data-num=3>3. Typowane formularze dla Angulara<\/h2>\n\n\n\n<p>S\u0142abe typowanie formularzy to jedno z najcz\u0119\u015bciej s\u0142yszanych zarzut\u00f3w wobec Angulara. Co prawda spo\u0142eczno\u015b\u0107 przygotowa\u0142a ju\u017c swoje biblioteki adresuj\u0105ce ten problem, ale w tym tygodniu zabra\u0142 si\u0119 za niego sam zesp\u00f3\u0142 Angulara. Na githubie pojawi\u0142o si\u0119 RFC nowej architektury i w kolejnych akapitach przyjrzymy si\u0119 mu pokr\u00f3tce.<\/p>\n\n\n\n<p>Do tej pory przy tworzeniu reaktywnych formularzy w\u0142a\u015bciwie ca\u0142e API oparte by\u0142o o typ any. RFC sugeruje silne otypowanie API. Na poz\u00f3r wydaje si\u0119 to zadaniem banalnie prostym, ale nale\u017cy pami\u0119ta\u0107, \u017ce reaktywne formularze nie s\u0105 niemutowalnym obiektem. W API znajdziemy metody umo\u017cliwiaj\u0105ce dynamiczne dodanie i usuni\u0119cie pola, a do tego dochodzi mo\u017cliwo\u015b\u0107 zagnie\u017cd\u017cania formularzy. Autorzy RFC zdecydowali si\u0119 udost\u0119pni\u0107 mutowalne metody tylko dla p\u00f3l oznaczonych jako opcjonalne. Oczywi\u015bcie podobnych rozterek jest wi\u0119cej, wi\u0119c zainteresowanych odsy\u0142am do samego RFC, kt\u00f3re znajdziecie w \u017ar\u00f3d\u0142ach.<\/p>\n\n\n\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-javascript\">const partyForm = new FormGroup({\n  address: new FormGroup({house: new FormControl(1234),\n                          street: new FormControl(&#039;Powell St&#039;)}),\n  formal: new FormControl(false),\n  foodOptions: new FormArray([])\n});\n\nconst partyDetails = partyForm.getRawValue(); \/\/ previously any object, now `Party` object \nconst where = partyForm.get(&#039;address.street&#039;)!.value; \/\/ previously typed as any now `string`\npartyForm.controls.formal.setValue(true); \/\/ previously param had type any now `boolean`<\/code><\/pre>\n\n\n\n<p>Je\u015bli usprawnione formularze trafi\u0105 do Angulara to aby zachowa\u0107 kompatybilno\u015b\u0107 wsteczn\u0105 wszystkie formularze w naszym kodzie automatycznie dostan\u0105 typ any. Mo\u017ce niezbyt to eleganckie, ale na pewno u\u0142atwi migracj\u0119.<\/p>\n\n\n\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-\">typealias AnyForUntypedForms = any; \n\nconst cat = new FormGroup&lt;AnyForUntypedForms&gt;({\n    name: new FormControl&lt;AnyForUntypedForms&gt;(&#039;bob&#039;),\n    lives: new FormControl&lt;AnyForUntypedForms&gt;(9),\n});<\/code><\/pre>\n\n\n\n<p>Jak pewnie zd\u0105\u017cyli\u015bcie zauwa\u017cy\u0107 do tej pory nie wspomnia\u0142em jeszcze o Template Driven Forms. Niestety formularze takie p\u00f3ki co nie doczekaj\u0105 si\u0119 usprawnie\u0144 bo jak t\u0142umacz\u0105 autorzy RFC template\u2019y w Angularze nie posiada API umo\u017cliwiaj\u0105cego dodanie typowania. R\u00f3wnolegle prowadzone s\u0105 dyskusje nad dodaniem takiego API, ale p\u00f3ki co nie mo\u017cemy liczy\u0107 na \u017cadne konkrety.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"668\" height=\"374\" src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/12\/FGvsAQfX0AcCGcc.jpeg\" alt=\"\" class=\"wp-image-3510\" srcset=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/12\/FGvsAQfX0AcCGcc.jpeg 668w, https:\/\/vived.io\/wp-content\/uploads\/2021\/12\/FGvsAQfX0AcCGcc-300x168.jpeg 300w\" sizes=\"auto, (max-width: 668px) 100vw, 668px\" \/><figcaption>Deweloperzy u\u017cywaj\u0105cy template-driven forms kiedy pojawi\u0142o si\u0119 nowe RFC<br>(\u0179r\u00f3d\u0142o: https:\/\/twitter.com\/brandontroberts\/status\/1471529193737445383?s=20)<\/figcaption><\/figure><\/div>\n\n\n\n<p>Na zako\u0144czenie wspomn\u0119 jeszcze, \u017ce RFC dotycz\u0105ce samodzielnych komponent\u00f3w zosta\u0142o zamkni\u0119te. Je\u015bli do Angulara 14 trafi\u0105 zar\u00f3wno samodzielne komponenty jak i typowane formularze, to ja nie mog\u0119 si\u0119 ju\u017c doczeka\u0107!<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u0179r\u00f3d\u0142a:<\/h3>\n\n\n\n<p><a href=\"https:\/\/github.com\/angular\/angular\/discussions\/44513\">https:\/\/github.com\/angular\/angular\/discussions\/44513<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u015awi\u0119ta ju\u017c za rogiem wi\u0119c zapraszamy na ostatni w tym roku przegl\u0105d frontendowych nowo\u015bci. <\/p>\n","protected":false},"author":12,"featured_media":7752,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[273],"tags":[],"class_list":["post-10028","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-frontend-pl"],"acf":{"weekly_summary":true,"push_notification_image":false,"estimated_reading_time":"4","feature_image_visible":false},"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.0 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Frontend Thursday vol. 69 - Blitz.js, Ember 4.0, typowane formularze dla Angulara - Vived<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/vived.io\/pl\/frontend-thursday-vol-69-blitz-js-ember-4-0-typowane-formularze-dla-angulara\/\" \/>\n<meta property=\"og:locale\" content=\"pl_PL\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Frontend Thursday vol. 69 - Blitz.js, Ember 4.0, typowane formularze dla Angulara - Vived\" \/>\n<meta property=\"og:description\" content=\"\u015awi\u0119ta ju\u017c za rogiem wi\u0119c zapraszamy na ostatni w tym roku przegl\u0105d frontendowych nowo\u015bci.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/vived.io\/pl\/frontend-thursday-vol-69-blitz-js-ember-4-0-typowane-formularze-dla-angulara\/\" \/>\n<meta property=\"og:site_name\" content=\"Vived\" \/>\n<meta property=\"article:published_time\" content=\"2021-12-23T15:49:37+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-09-19T11:16:34+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/12\/Screenshot-2021-12-23-at-16.29.06.png\" \/>\n\t<meta property=\"og:image:width\" content=\"3360\" \/>\n\t<meta property=\"og:image:height\" content=\"1760\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Tomasz Borowicz\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/12\/Screenshot-2021-12-23-at-16.29.06.png\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/vived.io\/pl\/frontend-thursday-vol-69-blitz-js-ember-4-0-typowane-formularze-dla-angulara\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/vived.io\/pl\/frontend-thursday-vol-69-blitz-js-ember-4-0-typowane-formularze-dla-angulara\/\"},\"author\":{\"name\":\"Tomasz Borowicz\",\"@id\":\"https:\/\/vived.io\/pl\/#\/schema\/person\/9d2a72fe7d0dfbb4092675afbab742bb\"},\"headline\":\"Frontend Thursday vol. 69 &#8211; Blitz.js, Ember 4.0, typowane formularze dla Angulara\",\"datePublished\":\"2021-12-23T15:49:37+00:00\",\"dateModified\":\"2022-09-19T11:16:34+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/vived.io\/pl\/frontend-thursday-vol-69-blitz-js-ember-4-0-typowane-formularze-dla-angulara\/\"},\"wordCount\":773,\"publisher\":{\"@id\":\"https:\/\/vived.io\/pl\/#organization\"},\"image\":{\"@id\":\"https:\/\/vived.io\/pl\/frontend-thursday-vol-69-blitz-js-ember-4-0-typowane-formularze-dla-angulara\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2021\/10\/cat-frontent.png\",\"articleSection\":[\"Frontend\"],\"inLanguage\":\"pl-PL\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/vived.io\/pl\/frontend-thursday-vol-69-blitz-js-ember-4-0-typowane-formularze-dla-angulara\/\",\"url\":\"https:\/\/vived.io\/pl\/frontend-thursday-vol-69-blitz-js-ember-4-0-typowane-formularze-dla-angulara\/\",\"name\":\"Frontend Thursday vol. 69 - Blitz.js, Ember 4.0, typowane formularze dla Angulara - Vived\",\"isPartOf\":{\"@id\":\"https:\/\/vived.io\/pl\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/vived.io\/pl\/frontend-thursday-vol-69-blitz-js-ember-4-0-typowane-formularze-dla-angulara\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/vived.io\/pl\/frontend-thursday-vol-69-blitz-js-ember-4-0-typowane-formularze-dla-angulara\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2021\/10\/cat-frontent.png\",\"datePublished\":\"2021-12-23T15:49:37+00:00\",\"dateModified\":\"2022-09-19T11:16:34+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/vived.io\/pl\/frontend-thursday-vol-69-blitz-js-ember-4-0-typowane-formularze-dla-angulara\/#breadcrumb\"},\"inLanguage\":\"pl-PL\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/vived.io\/pl\/frontend-thursday-vol-69-blitz-js-ember-4-0-typowane-formularze-dla-angulara\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\/\/vived.io\/pl\/frontend-thursday-vol-69-blitz-js-ember-4-0-typowane-formularze-dla-angulara\/#primaryimage\",\"url\":\"https:\/\/vived.io\/wp-content\/uploads\/2021\/10\/cat-frontent.png\",\"contentUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2021\/10\/cat-frontent.png\",\"width\":2000,\"height\":1210},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/vived.io\/pl\/frontend-thursday-vol-69-blitz-js-ember-4-0-typowane-formularze-dla-angulara\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Strona g\u0142\u00f3wna\",\"item\":\"https:\/\/vived.io\/pl\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Frontend Thursday vol. 69 &#8211; Blitz.js, Ember 4.0, typowane formularze dla Angulara\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/vived.io\/pl\/#website\",\"url\":\"https:\/\/vived.io\/pl\/\",\"name\":\"Vived\",\"description\":\"platform empowering IT people and technology companies to synergic growth\",\"publisher\":{\"@id\":\"https:\/\/vived.io\/pl\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/vived.io\/pl\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pl-PL\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/vived.io\/pl\/#organization\",\"name\":\"Vived\",\"url\":\"https:\/\/vived.io\/pl\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\/\/vived.io\/pl\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/vived.io\/wp-content\/uploads\/2020\/03\/logo_vived_color.png\",\"contentUrl\":\"https:\/\/vived.io\/wp-content\/uploads\/2020\/03\/logo_vived_color.png\",\"width\":136,\"height\":45,\"caption\":\"Vived\"},\"image\":{\"@id\":\"https:\/\/vived.io\/pl\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/vived.io\/pl\/#\/schema\/person\/9d2a72fe7d0dfbb4092675afbab742bb\",\"name\":\"Tomasz Borowicz\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pl-PL\",\"@id\":\"https:\/\/vived.io\/pl\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/804536d2672538508d43f60ad2108e5aaea76c192653eaf95d4c3934b7d1dbb6?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/804536d2672538508d43f60ad2108e5aaea76c192653eaf95d4c3934b7d1dbb6?s=96&d=mm&r=g\",\"caption\":\"Tomasz Borowicz\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Frontend Thursday vol. 69 - Blitz.js, Ember 4.0, typowane formularze dla Angulara - Vived","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/vived.io\/pl\/frontend-thursday-vol-69-blitz-js-ember-4-0-typowane-formularze-dla-angulara\/","og_locale":"pl_PL","og_type":"article","og_title":"Frontend Thursday vol. 69 - Blitz.js, Ember 4.0, typowane formularze dla Angulara - Vived","og_description":"\u015awi\u0119ta ju\u017c za rogiem wi\u0119c zapraszamy na ostatni w tym roku przegl\u0105d frontendowych nowo\u015bci.","og_url":"https:\/\/vived.io\/pl\/frontend-thursday-vol-69-blitz-js-ember-4-0-typowane-formularze-dla-angulara\/","og_site_name":"Vived","article_published_time":"2021-12-23T15:49:37+00:00","article_modified_time":"2022-09-19T11:16:34+00:00","og_image":[{"width":3360,"height":1760,"url":"https:\/\/vived.io\/wp-content\/uploads\/2021\/12\/Screenshot-2021-12-23-at-16.29.06.png","type":"image\/png"}],"author":"Tomasz Borowicz","twitter_card":"summary_large_image","twitter_image":"https:\/\/vived.io\/wp-content\/uploads\/2021\/12\/Screenshot-2021-12-23-at-16.29.06.png","schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/vived.io\/pl\/frontend-thursday-vol-69-blitz-js-ember-4-0-typowane-formularze-dla-angulara\/#article","isPartOf":{"@id":"https:\/\/vived.io\/pl\/frontend-thursday-vol-69-blitz-js-ember-4-0-typowane-formularze-dla-angulara\/"},"author":{"name":"Tomasz Borowicz","@id":"https:\/\/vived.io\/pl\/#\/schema\/person\/9d2a72fe7d0dfbb4092675afbab742bb"},"headline":"Frontend Thursday vol. 69 &#8211; Blitz.js, Ember 4.0, typowane formularze dla Angulara","datePublished":"2021-12-23T15:49:37+00:00","dateModified":"2022-09-19T11:16:34+00:00","mainEntityOfPage":{"@id":"https:\/\/vived.io\/pl\/frontend-thursday-vol-69-blitz-js-ember-4-0-typowane-formularze-dla-angulara\/"},"wordCount":773,"publisher":{"@id":"https:\/\/vived.io\/pl\/#organization"},"image":{"@id":"https:\/\/vived.io\/pl\/frontend-thursday-vol-69-blitz-js-ember-4-0-typowane-formularze-dla-angulara\/#primaryimage"},"thumbnailUrl":"https:\/\/vived.io\/wp-content\/uploads\/2021\/10\/cat-frontent.png","articleSection":["Frontend"],"inLanguage":"pl-PL"},{"@type":"WebPage","@id":"https:\/\/vived.io\/pl\/frontend-thursday-vol-69-blitz-js-ember-4-0-typowane-formularze-dla-angulara\/","url":"https:\/\/vived.io\/pl\/frontend-thursday-vol-69-blitz-js-ember-4-0-typowane-formularze-dla-angulara\/","name":"Frontend Thursday vol. 69 - Blitz.js, Ember 4.0, typowane formularze dla Angulara - Vived","isPartOf":{"@id":"https:\/\/vived.io\/pl\/#website"},"primaryImageOfPage":{"@id":"https:\/\/vived.io\/pl\/frontend-thursday-vol-69-blitz-js-ember-4-0-typowane-formularze-dla-angulara\/#primaryimage"},"image":{"@id":"https:\/\/vived.io\/pl\/frontend-thursday-vol-69-blitz-js-ember-4-0-typowane-formularze-dla-angulara\/#primaryimage"},"thumbnailUrl":"https:\/\/vived.io\/wp-content\/uploads\/2021\/10\/cat-frontent.png","datePublished":"2021-12-23T15:49:37+00:00","dateModified":"2022-09-19T11:16:34+00:00","breadcrumb":{"@id":"https:\/\/vived.io\/pl\/frontend-thursday-vol-69-blitz-js-ember-4-0-typowane-formularze-dla-angulara\/#breadcrumb"},"inLanguage":"pl-PL","potentialAction":[{"@type":"ReadAction","target":["https:\/\/vived.io\/pl\/frontend-thursday-vol-69-blitz-js-ember-4-0-typowane-formularze-dla-angulara\/"]}]},{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/vived.io\/pl\/frontend-thursday-vol-69-blitz-js-ember-4-0-typowane-formularze-dla-angulara\/#primaryimage","url":"https:\/\/vived.io\/wp-content\/uploads\/2021\/10\/cat-frontent.png","contentUrl":"https:\/\/vived.io\/wp-content\/uploads\/2021\/10\/cat-frontent.png","width":2000,"height":1210},{"@type":"BreadcrumbList","@id":"https:\/\/vived.io\/pl\/frontend-thursday-vol-69-blitz-js-ember-4-0-typowane-formularze-dla-angulara\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Strona g\u0142\u00f3wna","item":"https:\/\/vived.io\/pl\/"},{"@type":"ListItem","position":2,"name":"Frontend Thursday vol. 69 &#8211; Blitz.js, Ember 4.0, typowane formularze dla Angulara"}]},{"@type":"WebSite","@id":"https:\/\/vived.io\/pl\/#website","url":"https:\/\/vived.io\/pl\/","name":"Vived","description":"platform empowering IT people and technology companies to synergic growth","publisher":{"@id":"https:\/\/vived.io\/pl\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/vived.io\/pl\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pl-PL"},{"@type":"Organization","@id":"https:\/\/vived.io\/pl\/#organization","name":"Vived","url":"https:\/\/vived.io\/pl\/","logo":{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/vived.io\/pl\/#\/schema\/logo\/image\/","url":"https:\/\/vived.io\/wp-content\/uploads\/2020\/03\/logo_vived_color.png","contentUrl":"https:\/\/vived.io\/wp-content\/uploads\/2020\/03\/logo_vived_color.png","width":136,"height":45,"caption":"Vived"},"image":{"@id":"https:\/\/vived.io\/pl\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/vived.io\/pl\/#\/schema\/person\/9d2a72fe7d0dfbb4092675afbab742bb","name":"Tomasz Borowicz","image":{"@type":"ImageObject","inLanguage":"pl-PL","@id":"https:\/\/vived.io\/pl\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/804536d2672538508d43f60ad2108e5aaea76c192653eaf95d4c3934b7d1dbb6?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/804536d2672538508d43f60ad2108e5aaea76c192653eaf95d4c3934b7d1dbb6?s=96&d=mm&r=g","caption":"Tomasz Borowicz"}}]}},"blocks_vived":[{"blockName":"core\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2>1. Pivot Blitz.js<\/h2>\n","innerContent":["\n<h2>1. Pivot Blitz.js<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Blitz.js to framework oparty o Reacta przy pomocy kt\u00f3rego tworzy\u0107 mo\u017cna fullstackowe aplikacje. Dzi\u0119ki zamkni\u0119ciu wewn\u0105trz jednego narz\u0119dzia zar\u00f3wno frontendu jak i backendu, ca\u0142o\u015b\u0107 tworzy mocno monolityczn\u0105 architektur\u0119. To z kolei pozwala programistom zapomnie\u0107 o komunikacji pomi\u0119dzy aplikacj\u0105 klienck\u0105, a serwerem i pisa\u0107 frontendowe komponenty tak jakby mia\u0142y bezpo\u015bredni dost\u0119p do bazy danych.\u00a0<\/p>\n","innerContent":["\n<p>Blitz.js to framework oparty o Reacta przy pomocy kt\u00f3rego tworzy\u0107 mo\u017cna fullstackowe aplikacje. Dzi\u0119ki zamkni\u0119ciu wewn\u0105trz jednego narz\u0119dzia zar\u00f3wno frontendu jak i backendu, ca\u0142o\u015b\u0107 tworzy mocno monolityczn\u0105 architektur\u0119. To z kolei pozwala programistom zapomnie\u0107 o komunikacji pomi\u0119dzy aplikacj\u0105 klienck\u0105, a serwerem i pisa\u0107 frontendowe komponenty tak jakby mia\u0142y bezpo\u015bredni dost\u0119p do bazy danych.\u00a0<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Tw\u00f3rca Blitz.js w zesz\u0142ym tygodniu og\u0142osi\u0142 pivot frameworku. W nadchodz\u0105cych miesi\u0105cach porzucony zostanie fork Next.js, o kt\u00f3rego opiera\u0142o si\u0119 ca\u0142e rozwi\u0105zanie. Sam framework zostanie przepisany, w taki spos\u00f3b, aby wsp\u00f3\u0142pracowa\u0107 w\u0142a\u015bciwie z dowolnym narz\u0119dziem do renderowania po stronie serwera. W podlinkowanym RFC opr\u00f3cz Next.js wspomniany\u00a0 jest r\u00f3wnie\u017c Remix i SvelteKit, ale nie jest to zamkni\u0119ta lista.<\/p>\n","innerContent":["\n<p>Tw\u00f3rca Blitz.js w zesz\u0142ym tygodniu og\u0142osi\u0142 pivot frameworku. W nadchodz\u0105cych miesi\u0105cach porzucony zostanie fork Next.js, o kt\u00f3rego opiera\u0142o si\u0119 ca\u0142e rozwi\u0105zanie. Sam framework zostanie przepisany, w taki spos\u00f3b, aby wsp\u00f3\u0142pracowa\u0107 w\u0142a\u015bciwie z dowolnym narz\u0119dziem do renderowania po stronie serwera. W podlinkowanym RFC opr\u00f3cz Next.js wspomniany\u00a0 jest r\u00f3wnie\u017c Remix i SvelteKit, ale nie jest to zamkni\u0119ta lista.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":3508,"sizeSlug":"full","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/12\/5yw03m.jpeg\" alt=\"\" class=\"wp-image-3508\"\/><\/figure><\/div>\n","innerContent":["\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/12\/5yw03m.jpeg\" alt=\"\" class=\"wp-image-3508\"\/><\/figure><\/div>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Ci\u0119\u017cko odm\u00f3wi\u0107 racjonalno\u015bci podj\u0119tym decyzjom. Pomimo pocz\u0105tkowego szybkiego wzrostu popularno\u015bci frameworku, w ci\u0105gu ostatniego roku Blitz.js tygodniowo pobierany by\u0142 oko\u0142o 5000 razy, gdzie Next.js mia\u0142 tych pobra\u0144 ponad 2 miliony. Po ponad dw\u00f3ch latach trwania projektu oczywistym staje si\u0119, \u017ce podj\u0119cie walki z rynkowym gigantem b\u0119dzie niemo\u017cliwe, a znaleziona nisza zbyt ma\u0142a, \u017ceby utrzyma\u0107 projekt przy \u017cyciu. Je\u015bli tw\u00f3rcom Blitz.js rzeczywi\u015bcie uda si\u0119 stworzy\u0107 narz\u0119dzie niezale\u017cne od frameworku i przy tym zachowa\u0107 obecny Developer Experience to rynek potencjalnych klient\u00f3w zdecydowanie si\u0119 poszerzy.<\/p>\n","innerContent":["\n<p>Ci\u0119\u017cko odm\u00f3wi\u0107 racjonalno\u015bci podj\u0119tym decyzjom. Pomimo pocz\u0105tkowego szybkiego wzrostu popularno\u015bci frameworku, w ci\u0105gu ostatniego roku Blitz.js tygodniowo pobierany by\u0142 oko\u0142o 5000 razy, gdzie Next.js mia\u0142 tych pobra\u0144 ponad 2 miliony. Po ponad dw\u00f3ch latach trwania projektu oczywistym staje si\u0119, \u017ce podj\u0119cie walki z rynkowym gigantem b\u0119dzie niemo\u017cliwe, a znaleziona nisza zbyt ma\u0142a, \u017ceby utrzyma\u0107 projekt przy \u017cyciu. Je\u015bli tw\u00f3rcom Blitz.js rzeczywi\u015bcie uda si\u0119 stworzy\u0107 narz\u0119dzie niezale\u017cne od frameworku i przy tym zachowa\u0107 obecny Developer Experience to rynek potencjalnych klient\u00f3w zdecydowanie si\u0119 poszerzy.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Je\u015bli jeste\u015bcie zainteresowani tym jak b\u0119dzie wygl\u0105da\u0107 nowe wcielenie Blitz.js, to w zalinkowanym\u00a0 poni\u017cej RFC znajdziecie kr\u00f3tki szkic nowej architektury. Na razie na pr\u00f3\u017cno szuka\u0107 konkretnych deklaracji i termin\u00f3w ze strony tw\u00f3rc\u00f3w. Osobi\u015bcie trzymam kciuki za projekt i z przyjemno\u015bci\u0105 przekonam si\u0119 czy znajdzie on dla siebie sta\u0142e miejsce na rynku.<\/p>\n","innerContent":["\n<p>Je\u015bli jeste\u015bcie zainteresowani tym jak b\u0119dzie wygl\u0105da\u0107 nowe wcielenie Blitz.js, to w zalinkowanym\u00a0 poni\u017cej RFC znajdziecie kr\u00f3tki szkic nowej architektury. Na razie na pr\u00f3\u017cno szuka\u0107 konkretnych deklaracji i termin\u00f3w ze strony tw\u00f3rc\u00f3w. Osobi\u015bcie trzymam kciuki za projekt i z przyjemno\u015bci\u0105 przekonam si\u0119 czy znajdzie on dla siebie sta\u0142e miejsce na rynku.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":3},"innerBlocks":[],"innerHTML":"\n<h3>\u0179r\u00f3d\u0142a:<\/h3>\n","innerContent":["\n<h3>\u0179r\u00f3d\u0142a:<\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p><a href=\"https:\/\/github.com\/blitz-js\/blitz\/discussions\/3075\">https:\/\/github.com\/blitz-js\/blitz\/discussions\/3075<\/a><br><a href=\"https:\/\/www.reddit.com\/r\/javascript\/comments\/rixypj\/blitz_is_pivoting_what_do_you_think\/\">https:\/\/www.reddit.com\/r\/javascript\/comments\/rixypj\/blitz_is_pivoting_what_do_you_think\/<\/a><\/p>\n","innerContent":["\n<p><a href=\"https:\/\/github.com\/blitz-js\/blitz\/discussions\/3075\">https:\/\/github.com\/blitz-js\/blitz\/discussions\/3075<\/a><br><a href=\"https:\/\/www.reddit.com\/r\/javascript\/comments\/rixypj\/blitz_is_pivoting_what_do_you_think\/\">https:\/\/www.reddit.com\/r\/javascript\/comments\/rixypj\/blitz_is_pivoting_what_do_you_think\/<\/a><\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2>2. Ember 4.0<\/h2>\n","innerContent":["\n<h2>2. Ember 4.0<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Tu\u017c przed \u015bwi\u0119tami mamy dobre wie\u015bci dla wszystkich fan\u00f3w Embera (je\u015bli nie jest to ju\u017c gatunel wymar\u0142y)\u00a0 - w minionym tygodniu ukaza\u0142a si\u0119 finalna wersja 4.0 tego frameworka. Z notatki towarzysz\u0105cej wydaniu dowiadujemy si\u0119 r\u00f3wnie\u017c, \u017ce wersja 3.28 oznaczona zosta\u0142a jako LTS oraz, \u017ce wersja 4.0 nie zawiera istotnych nowo\u015bci. Zmiana numerka z przodu zwi\u0105zana jest z porzuceniem nie wspieranych ju\u017c API.\u00a0<\/p>\n","innerContent":["\n<p>Tu\u017c przed \u015bwi\u0119tami mamy dobre wie\u015bci dla wszystkich fan\u00f3w Embera (je\u015bli nie jest to ju\u017c gatunel wymar\u0142y)\u00a0 - w minionym tygodniu ukaza\u0142a si\u0119 finalna wersja 4.0 tego frameworka. Z notatki towarzysz\u0105cej wydaniu dowiadujemy si\u0119 r\u00f3wnie\u017c, \u017ce wersja 3.28 oznaczona zosta\u0142a jako LTS oraz, \u017ce wersja 4.0 nie zawiera istotnych nowo\u015bci. Zmiana numerka z przodu zwi\u0105zana jest z porzuceniem nie wspieranych ju\u017c API.\u00a0<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":3509,"sizeSlug":"full","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/12\/giphy-3.gif\" alt=\"\" class=\"wp-image-3509\"\/><figcaption>Pomy\u015ble\u0107 tylko, \u017ce ja narzekam na brak nowo\u015bci w kolejnych wersjach Reacta i Angulara\u2026<\/figcaption><\/figure><\/div>\n","innerContent":["\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/12\/giphy-3.gif\" alt=\"\" class=\"wp-image-3509\"\/><figcaption>Pomy\u015ble\u0107 tylko, \u017ce ja narzekam na brak nowo\u015bci w kolejnych wersjach Reacta i Angulara\u2026<\/figcaption><\/figure><\/div>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":3},"innerBlocks":[],"innerHTML":"\n<h3>\u0179r\u00f3d\u0142a:<\/h3>\n","innerContent":["\n<h3>\u0179r\u00f3d\u0142a:<\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p><a href=\"https:\/\/blog.emberjs.com\/ember-4-0-released\/\">https:\/\/blog.emberjs.com\/ember-4-0-released\/<\/a><\/p>\n","innerContent":["\n<p><a href=\"https:\/\/blog.emberjs.com\/ember-4-0-released\/\">https:\/\/blog.emberjs.com\/ember-4-0-released\/<\/a><\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":[],"innerBlocks":[],"innerHTML":"\n<h2>3. Typowane formularze dla Angulara<\/h2>\n","innerContent":["\n<h2>3. Typowane formularze dla Angulara<\/h2>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>S\u0142abe typowanie formularzy to jedno z najcz\u0119\u015bciej s\u0142yszanych zarzut\u00f3w wobec Angulara. Co prawda spo\u0142eczno\u015b\u0107 przygotowa\u0142a ju\u017c swoje biblioteki adresuj\u0105ce ten problem, ale w tym tygodniu zabra\u0142 si\u0119 za niego sam zesp\u00f3\u0142 Angulara. Na githubie pojawi\u0142o si\u0119 RFC nowej architektury i w kolejnych akapitach przyjrzymy si\u0119 mu pokr\u00f3tce.<\/p>\n","innerContent":["\n<p>S\u0142abe typowanie formularzy to jedno z najcz\u0119\u015bciej s\u0142yszanych zarzut\u00f3w wobec Angulara. Co prawda spo\u0142eczno\u015b\u0107 przygotowa\u0142a ju\u017c swoje biblioteki adresuj\u0105ce ten problem, ale w tym tygodniu zabra\u0142 si\u0119 za niego sam zesp\u00f3\u0142 Angulara. Na githubie pojawi\u0142o si\u0119 RFC nowej architektury i w kolejnych akapitach przyjrzymy si\u0119 mu pokr\u00f3tce.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Do tej pory przy tworzeniu reaktywnych formularzy w\u0142a\u015bciwie ca\u0142e API oparte by\u0142o o typ any. RFC sugeruje silne otypowanie API. Na poz\u00f3r wydaje si\u0119 to zadaniem banalnie prostym, ale nale\u017cy pami\u0119ta\u0107, \u017ce reaktywne formularze nie s\u0105 niemutowalnym obiektem. W API znajdziemy metody umo\u017cliwiaj\u0105ce dynamiczne dodanie i usuni\u0119cie pola, a do tego dochodzi mo\u017cliwo\u015b\u0107 zagnie\u017cd\u017cania formularzy. Autorzy RFC zdecydowali si\u0119 udost\u0119pni\u0107 mutowalne metody tylko dla p\u00f3l oznaczonych jako opcjonalne. Oczywi\u015bcie podobnych rozterek jest wi\u0119cej, wi\u0119c zainteresowanych odsy\u0142am do samego RFC, kt\u00f3re znajdziecie w \u017ar\u00f3d\u0142ach.<\/p>\n","innerContent":["\n<p>Do tej pory przy tworzeniu reaktywnych formularzy w\u0142a\u015bciwie ca\u0142e API oparte by\u0142o o typ any. RFC sugeruje silne otypowanie API. Na poz\u00f3r wydaje si\u0119 to zadaniem banalnie prostym, ale nale\u017cy pami\u0119ta\u0107, \u017ce reaktywne formularze nie s\u0105 niemutowalnym obiektem. W API znajdziemy metody umo\u017cliwiaj\u0105ce dynamiczne dodanie i usuni\u0119cie pola, a do tego dochodzi mo\u017cliwo\u015b\u0107 zagnie\u017cd\u017cania formularzy. Autorzy RFC zdecydowali si\u0119 udost\u0119pni\u0107 mutowalne metody tylko dla p\u00f3l oznaczonych jako opcjonalne. Oczywi\u015bcie podobnych rozterek jest wi\u0119cej, wi\u0119c zainteresowanych odsy\u0142am do samego RFC, kt\u00f3re znajdziecie w \u017ar\u00f3d\u0142ach.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"prismatic\/blocks","attrs":{"language":"javascript"},"innerBlocks":[],"innerHTML":"\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-javascript\">const partyForm = new FormGroup({\n  address: new FormGroup({house: new FormControl(1234),\n                          street: new FormControl('Powell St')}),\n  formal: new FormControl(false),\n  foodOptions: new FormArray([])\n});\n\nconst partyDetails = partyForm.getRawValue(); \/\/ previously any object, now `Party` object \nconst where = partyForm.get('address.street')!.value; \/\/ previously typed as any now `string`\npartyForm.controls.formal.setValue(true); \/\/ previously param had type any now `boolean`<\/code><\/pre>\n","innerContent":["\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-javascript\">const partyForm = new FormGroup({\n  address: new FormGroup({house: new FormControl(1234),\n                          street: new FormControl('Powell St')}),\n  formal: new FormControl(false),\n  foodOptions: new FormArray([])\n});\n\nconst partyDetails = partyForm.getRawValue(); \/\/ previously any object, now `Party` object \nconst where = partyForm.get('address.street')!.value; \/\/ previously typed as any now `string`\npartyForm.controls.formal.setValue(true); \/\/ previously param had type any now `boolean`<\/code><\/pre>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Je\u015bli usprawnione formularze trafi\u0105 do Angulara to aby zachowa\u0107 kompatybilno\u015b\u0107 wsteczn\u0105 wszystkie formularze w naszym kodzie automatycznie dostan\u0105 typ any. Mo\u017ce niezbyt to eleganckie, ale na pewno u\u0142atwi migracj\u0119.<\/p>\n","innerContent":["\n<p>Je\u015bli usprawnione formularze trafi\u0105 do Angulara to aby zachowa\u0107 kompatybilno\u015b\u0107 wsteczn\u0105 wszystkie formularze w naszym kodzie automatycznie dostan\u0105 typ any. Mo\u017ce niezbyt to eleganckie, ale na pewno u\u0142atwi migracj\u0119.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"prismatic\/blocks","attrs":[],"innerBlocks":[],"innerHTML":"\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-\">typealias AnyForUntypedForms = any; \n\nconst cat = new FormGroup&lt;AnyForUntypedForms>({\n    name: new FormControl&lt;AnyForUntypedForms>('bob'),\n    lives: new FormControl&lt;AnyForUntypedForms>(9),\n});<\/code><\/pre>\n","innerContent":["\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-\">typealias AnyForUntypedForms = any; \n\nconst cat = new FormGroup&lt;AnyForUntypedForms>({\n    name: new FormControl&lt;AnyForUntypedForms>('bob'),\n    lives: new FormControl&lt;AnyForUntypedForms>(9),\n});<\/code><\/pre>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Jak pewnie zd\u0105\u017cyli\u015bcie zauwa\u017cy\u0107 do tej pory nie wspomnia\u0142em jeszcze o Template Driven Forms. Niestety formularze takie p\u00f3ki co nie doczekaj\u0105 si\u0119 usprawnie\u0144 bo jak t\u0142umacz\u0105 autorzy RFC template\u2019y w Angularze nie posiada API umo\u017cliwiaj\u0105cego dodanie typowania. R\u00f3wnolegle prowadzone s\u0105 dyskusje nad dodaniem takiego API, ale p\u00f3ki co nie mo\u017cemy liczy\u0107 na \u017cadne konkrety.<\/p>\n","innerContent":["\n<p>Jak pewnie zd\u0105\u017cyli\u015bcie zauwa\u017cy\u0107 do tej pory nie wspomnia\u0142em jeszcze o Template Driven Forms. Niestety formularze takie p\u00f3ki co nie doczekaj\u0105 si\u0119 usprawnie\u0144 bo jak t\u0142umacz\u0105 autorzy RFC template\u2019y w Angularze nie posiada API umo\u017cliwiaj\u0105cego dodanie typowania. R\u00f3wnolegle prowadzone s\u0105 dyskusje nad dodaniem takiego API, ale p\u00f3ki co nie mo\u017cemy liczy\u0107 na \u017cadne konkrety.<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/image","attrs":{"align":"center","id":3510,"sizeSlug":"full","linkDestination":"none"},"innerBlocks":[],"innerHTML":"\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/12\/FGvsAQfX0AcCGcc.jpeg\" alt=\"\" class=\"wp-image-3510\"\/><figcaption>Deweloperzy u\u017cywaj\u0105cy template-driven forms kiedy pojawi\u0142o si\u0119 nowe RFC<br>(\u0179r\u00f3d\u0142o: https:\/\/twitter.com\/brandontroberts\/status\/1471529193737445383?s=20)<\/figcaption><\/figure><\/div>\n","innerContent":["\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-full\"><img src=\"https:\/\/vived.io\/wp-content\/uploads\/2021\/12\/FGvsAQfX0AcCGcc.jpeg\" alt=\"\" class=\"wp-image-3510\"\/><figcaption>Deweloperzy u\u017cywaj\u0105cy template-driven forms kiedy pojawi\u0142o si\u0119 nowe RFC<br>(\u0179r\u00f3d\u0142o: https:\/\/twitter.com\/brandontroberts\/status\/1471529193737445383?s=20)<\/figcaption><\/figure><\/div>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p>Na zako\u0144czenie wspomn\u0119 jeszcze, \u017ce RFC dotycz\u0105ce samodzielnych komponent\u00f3w zosta\u0142o zamkni\u0119te. Je\u015bli do Angulara 14 trafi\u0105 zar\u00f3wno samodzielne komponenty jak i typowane formularze, to ja nie mog\u0119 si\u0119 ju\u017c doczeka\u0107!<\/p>\n","innerContent":["\n<p>Na zako\u0144czenie wspomn\u0119 jeszcze, \u017ce RFC dotycz\u0105ce samodzielnych komponent\u00f3w zosta\u0142o zamkni\u0119te. Je\u015bli do Angulara 14 trafi\u0105 zar\u00f3wno samodzielne komponenty jak i typowane formularze, to ja nie mog\u0119 si\u0119 ju\u017c doczeka\u0107!<\/p>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/heading","attrs":{"level":3},"innerBlocks":[],"innerHTML":"\n<h3>\u0179r\u00f3d\u0142a:<\/h3>\n","innerContent":["\n<h3>\u0179r\u00f3d\u0142a:<\/h3>\n"]},{"blockName":null,"attrs":[],"innerBlocks":[],"innerHTML":"\n\n","innerContent":["\n\n"]},{"blockName":"core\/paragraph","attrs":[],"innerBlocks":[],"innerHTML":"\n<p><a href=\"https:\/\/github.com\/angular\/angular\/discussions\/44513\">https:\/\/github.com\/angular\/angular\/discussions\/44513<\/a><\/p>\n","innerContent":["\n<p><a href=\"https:\/\/github.com\/angular\/angular\/discussions\/44513\">https:\/\/github.com\/angular\/angular\/discussions\/44513<\/a><\/p>\n"]}],"_links":{"self":[{"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/10028","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/users\/12"}],"replies":[{"embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/comments?post=10028"}],"version-history":[{"count":1,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/10028\/revisions"}],"predecessor-version":[{"id":10608,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/posts\/10028\/revisions\/10608"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/media\/7752"}],"wp:attachment":[{"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/media?parent=10028"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/categories?post=10028"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/vived.io\/pl\/wp-json\/wp\/v2\/tags?post=10028"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}