{"id":6044,"date":"2024-04-09T11:40:44","date_gmt":"2024-04-09T15:40:44","guid":{"rendered":"https:\/\/ionic.io\/blog\/?p=6044"},"modified":"2024-04-09T11:43:29","modified_gmt":"2024-04-09T15:43:29","slug":"recapping-ngconf-2024","status":"publish","type":"post","link":"https:\/\/ionic.io\/blog\/recapping-ngconf-2024","title":{"rendered":"Recapping ngConf 2024"},"content":{"rendered":"\n<p>In March, the Angular community gathered in Salt Lake City for the annual edition of ngConf. If you have been following along with the Angular Renaissance, then you know how exciting this ngConf was. There were amazing sessions from community members (including yours truly) as well as critical updates from the Angular Core team. With that in mind, let\u2019s look at some of the updates and see what this means for Ionic developers using Angular.<\/p>\n\n\n\n<!--more-->\n\n\n\n<h2 class=\"wp-block-heading\">A new <code>output<\/code> on things<\/h2>\n\n\n\n<p><a href=\"https:\/\/ionic.io\/blog\/catching-up-with-the-latest-features-in-angular\">Last month, I wrote<\/a> about how Angular was revisiting its core set of component APIs to streamline and simplify how things work in Angular. At the center of all of this was the new Signals API, which allowed for smarter reactive data flow. With Signals, we\u2019re able to have new APIs for <code>input<\/code>, view queries, <code>model<\/code>, and much more. But one API that is <em>not<\/em> Signal based is the new <code>output<\/code> API.&nbsp;<\/p>\n\n\n\n<p>During the opening Keynote, the Angular team wanted to be very clear that output was not a signal-based API, but rather a unification of API models and a simpler approach to creating custom events. Currently, Angular offers a <code>@Output<\/code> directive, which allows developers to create their own custom events:<\/p>\n\n\n\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-typescript\">@Component({...})\nexport class AppComponent{\n  \n  @Output()\n  myEvent = new EventEmitter&lt;{detail: number}&gt;()\n\n  someMethod(){\n      this.myEvent.emit({detail: 5})\n  }\n}<\/code><\/pre>\n\n\n\n<p>This decorator-based API works, but can be a bit cumbersome. For Instance, it\u2019s not enough to just attach the decorator, you still have to set the value to an <code>EventEmitter<\/code>, which can trip people up. Plus, since the team is moving towards using functions instead of decorators, this stands out as being an older API. Instead, the team is providing a simpler <code>output<\/code> function:<\/p>\n\n\n\n<pre class=\"wp-block-prismatic-blocks\"><code class=\"language-typescript\">@Component({...})\nexport class AppComponent{\n  \n  myEvent = output&lt;{detail: number}&gt;();\n\n  someMethod(){\n      this.myEvent.emit({detail: 5})\n  }\n}<\/code><\/pre>\n\n\n\n<p>Nothing about how events work has changed, this is simply aligning on API design and removing the extra new <code>EventEmitter<\/code> that developers were forced to remember. While a small change, it\u2019s a very welcomed one, as now all the core primitives in Angular are aligned, and we have a consistent way of setting and emitting data.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">The new Wiz kid<\/h2>\n\n\n\n<p>If the name \u201cWiz\u201d means nothing to you, you\u2019re not alone. Wiz is an internal framework at Google that has been at the forefront of providing great performance and is used in mission-critical apps like Search, Meets, Play, YouTube, etc. The big news is that The Angular team and the Wiz team are collaborating and sharing their knowledge and code. While at the conference, the message seemed to be \u201cwe\u2019re collaborating,\u201d and on social media, <a href=\"https:\/\/twitter.com\/sarah_edo\">Sarah Drasner<\/a> (Engineering Manager for both Angular &amp; Wiz) clarified and stated the teams will eventually merge.&nbsp;<\/p>\n\n\n\n<p>This matters because Wiz has some amazing features that come into play for server-side rendered apps. One feature that we get with this merge is something called JSAction. JSAction is a small library that allows server-side rendered apps to capture events, then when the client-side app is hydrated, it can replay all of those captured events and play it back. This isn\u2019t something that is a far off idea, there\u2019s <a href=\"https:\/\/github.com\/angular\/angular\/pull\/55078\">already a pull request from the Wiz team<\/a> to add JSAction to Angular Core. There\u2019s more about this from a later talk \u201cWhat\u2019s cooking with SSR in Angular\u201d from Jessica Janiuk and Doug Parker that dives into how developers would take advantage of this in the future.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Sessions Worth-a Mention<\/h2>\n\n\n\n<p>With the main keynote out of the way, we had two days of amazing sessions from our community. While tons of great content was shared, some talks that stood out to me were:&nbsp;<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Deferred Loading for Code of All Ages&nbsp;<\/h3>\n\n\n\n<p>This talk from <a href=\"https:\/\/twitter.com\/LaraNerdsom\">Lara Newsom<\/a> covered a new lazy loading method in Angular templating API. This new <code>@defer<\/code> block allows developers to specify which sections of their templates should be split out into their own chunks. Meaning you can lazily load portions of your app by simply wrapping them in a <code>@defer<\/code> block and setting what should trigger the loading. Very helpful!&nbsp;<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Signals of Change<\/h3>\n\n\n\n<p>This was a talk from NgRx core member <a href=\"https:\/\/twitter.com\/MarkoStDev\">Marko Stanimirovi\u0107<\/a> about their investments in Signals. If you\u2019ve been in the Angular community for any number of years, you\u2019ve probably used NgRx as your state management system. Since NgRx is based on Observables, the move to Signals is something the team has been taking into consideration. Taking everything they\u2019ve learned while maintaining the Observable-based NgRx library, they\u2019ve created <code>@ngrx\/signals<\/code> which brings about a whole new way of managing your app\u2019s state.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Building the next meta-framework with Angular<\/h3>\n\n\n\n<p>One of the most exciting talks for me was <a href=\"https:\/\/twitter.com\/brandontroberts\">Brandon Roberts<\/a>\u2019s talk on Analog. Analog is a meta-framework, meaning it builds on top of Angular and provides similar features to tools like Next or Nuxt. As Analog recently hit its 1.0 release, there\u2019s a lot of opportunity to build your next app with Analog and take advantage of its server-side capabilities, and file-based routing.&nbsp;&nbsp;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Parting Thoughts<\/h2>\n\n\n\n<p>This year\u2019s edition of ngConf was another reason why, for me, Angular is going to continue being my framework of choice for years to come. With all the new features coming to the framework, the team has leaned heavily into making sure these improvements are not only faster than past iterations, but also easier to reason about. Add to the mix the merger of Angular and Wiz, and you have the best offerings of server-side app and client side interactions. Let\u2019s see what Angular becomes in 2025!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In March, the Angular community gathered in Salt Lake City for the annual edition of ngConf. Here are some of the most interesting things I learned there.<\/p>\n","protected":false},"author":5,"featured_media":6049,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"publish_to_discourse":"1","publish_post_category":"23","wpdc_auto_publish_overridden":"","wpdc_topic_tags":"","wpdc_pin_topic":"","wpdc_pin_until":"","discourse_post_id":"575286","discourse_permalink":"http:\/\/forum.ionicframework.com\/t\/recapping-ngconf-2024\/240840","wpdc_publishing_response":"success","wpdc_publishing_error":"","_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[1,123],"tags":[60,280],"class_list":["post-6044","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-all","category-perspectives","tag-angular","tag-ngconf"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v23.0 (Yoast SEO v23.0) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Recapping ngConf 2024 - Ionic Blog<\/title>\n<meta name=\"description\" content=\"In March, the Angular community gathered for the annual edition of ngConf. Here are some of the most interesting things I learned there.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/ionic.io\/blog\/recapping-ngconf-2024\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Recapping ngConf 2024\" \/>\n<meta property=\"og:description\" content=\"In March, the Angular community gathered for the annual edition of ngConf. Here are some of the most interesting things I learned there.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/ionic.io\/blog\/recapping-ngconf-2024\" \/>\n<meta property=\"og:site_name\" content=\"Ionic Blog\" \/>\n<meta property=\"article:published_time\" content=\"2024-04-09T15:40:44+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-04-09T15:43:29+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/04\/ng-conf-recap-feature-image-1024x512.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1024\" \/>\n\t<meta property=\"og:image:height\" content=\"512\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Mike Hartington\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@mhartington\" \/>\n<meta name=\"twitter:site\" content=\"@ionicframework\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Mike Hartington\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/ionic.io\/blog\/recapping-ngconf-2024#article\",\"isPartOf\":{\"@id\":\"https:\/\/ionic.io\/blog\/recapping-ngconf-2024\"},\"author\":{\"name\":\"Mike Hartington\",\"@id\":\"https:\/\/ionic.io\/blog\/#\/schema\/person\/c8c92b04d526adb925ea514c619a267b\"},\"headline\":\"Recapping ngConf 2024\",\"datePublished\":\"2024-04-09T15:40:44+00:00\",\"dateModified\":\"2024-04-09T15:43:29+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/ionic.io\/blog\/recapping-ngconf-2024\"},\"wordCount\":896,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/ionic.io\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/ionic.io\/blog\/recapping-ngconf-2024#primaryimage\"},\"thumbnailUrl\":\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/04\/ng-conf-recap-feature-image.png\",\"keywords\":[\"Angular\",\"ngconf\"],\"articleSection\":[\"All\",\"Perspectives\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/ionic.io\/blog\/recapping-ngconf-2024#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/ionic.io\/blog\/recapping-ngconf-2024\",\"url\":\"https:\/\/ionic.io\/blog\/recapping-ngconf-2024\",\"name\":\"Recapping ngConf 2024 - Ionic Blog\",\"isPartOf\":{\"@id\":\"https:\/\/ionic.io\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/ionic.io\/blog\/recapping-ngconf-2024#primaryimage\"},\"image\":{\"@id\":\"https:\/\/ionic.io\/blog\/recapping-ngconf-2024#primaryimage\"},\"thumbnailUrl\":\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/04\/ng-conf-recap-feature-image.png\",\"datePublished\":\"2024-04-09T15:40:44+00:00\",\"dateModified\":\"2024-04-09T15:43:29+00:00\",\"description\":\"In March, the Angular community gathered for the annual edition of ngConf. Here are some of the most interesting things I learned there.\",\"breadcrumb\":{\"@id\":\"https:\/\/ionic.io\/blog\/recapping-ngconf-2024#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/ionic.io\/blog\/recapping-ngconf-2024\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/ionic.io\/blog\/recapping-ngconf-2024#primaryimage\",\"url\":\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/04\/ng-conf-recap-feature-image.png\",\"contentUrl\":\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/04\/ng-conf-recap-feature-image.png\",\"width\":2240,\"height\":1120},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/ionic.io\/blog\/recapping-ngconf-2024#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/ionic.io\/blog\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Recapping ngConf 2024\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/ionic.io\/blog\/#website\",\"url\":\"https:\/\/ionic.io\/blog\/\",\"name\":\"ionic.io\/blog\",\"description\":\"Build amazing native and progressive web apps with the web\",\"publisher\":{\"@id\":\"https:\/\/ionic.io\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/ionic.io\/blog\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/ionic.io\/blog\/#organization\",\"name\":\"Ionic\",\"url\":\"https:\/\/ionic.io\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/ionic.io\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2020\/10\/white-on-color.png\",\"contentUrl\":\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2020\/10\/white-on-color.png\",\"width\":1920,\"height\":854,\"caption\":\"Ionic\"},\"image\":{\"@id\":\"https:\/\/ionic.io\/blog\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/x.com\/ionicframework\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/ionic.io\/blog\/#\/schema\/person\/c8c92b04d526adb925ea514c619a267b\",\"name\":\"Mike Hartington\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/ionic.io\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2018\/08\/mike-headshot-2-smaller-150x150.png\",\"contentUrl\":\"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2018\/08\/mike-headshot-2-smaller-150x150.png\",\"caption\":\"Mike Hartington\"},\"description\":\"Director of Developer Relations\",\"sameAs\":[\"https:\/\/twitter.com\/mhartington\",\"https:\/\/x.com\/mhartington\"],\"url\":\"https:\/\/ionic.io\/blog\/author\/mike\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Recapping ngConf 2024 - Ionic Blog","description":"In March, the Angular community gathered for the annual edition of ngConf. Here are some of the most interesting things I learned there.","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:\/\/ionic.io\/blog\/recapping-ngconf-2024","og_locale":"en_US","og_type":"article","og_title":"Recapping ngConf 2024","og_description":"In March, the Angular community gathered for the annual edition of ngConf. Here are some of the most interesting things I learned there.","og_url":"https:\/\/ionic.io\/blog\/recapping-ngconf-2024","og_site_name":"Ionic Blog","article_published_time":"2024-04-09T15:40:44+00:00","article_modified_time":"2024-04-09T15:43:29+00:00","og_image":[{"width":1024,"height":512,"url":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/04\/ng-conf-recap-feature-image-1024x512.png","type":"image\/png"}],"author":"Mike Hartington","twitter_card":"summary_large_image","twitter_creator":"@mhartington","twitter_site":"@ionicframework","twitter_misc":{"Written by":"Mike Hartington","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/ionic.io\/blog\/recapping-ngconf-2024#article","isPartOf":{"@id":"https:\/\/ionic.io\/blog\/recapping-ngconf-2024"},"author":{"name":"Mike Hartington","@id":"https:\/\/ionic.io\/blog\/#\/schema\/person\/c8c92b04d526adb925ea514c619a267b"},"headline":"Recapping ngConf 2024","datePublished":"2024-04-09T15:40:44+00:00","dateModified":"2024-04-09T15:43:29+00:00","mainEntityOfPage":{"@id":"https:\/\/ionic.io\/blog\/recapping-ngconf-2024"},"wordCount":896,"commentCount":0,"publisher":{"@id":"https:\/\/ionic.io\/blog\/#organization"},"image":{"@id":"https:\/\/ionic.io\/blog\/recapping-ngconf-2024#primaryimage"},"thumbnailUrl":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/04\/ng-conf-recap-feature-image.png","keywords":["Angular","ngconf"],"articleSection":["All","Perspectives"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/ionic.io\/blog\/recapping-ngconf-2024#respond"]}]},{"@type":"WebPage","@id":"https:\/\/ionic.io\/blog\/recapping-ngconf-2024","url":"https:\/\/ionic.io\/blog\/recapping-ngconf-2024","name":"Recapping ngConf 2024 - Ionic Blog","isPartOf":{"@id":"https:\/\/ionic.io\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/ionic.io\/blog\/recapping-ngconf-2024#primaryimage"},"image":{"@id":"https:\/\/ionic.io\/blog\/recapping-ngconf-2024#primaryimage"},"thumbnailUrl":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/04\/ng-conf-recap-feature-image.png","datePublished":"2024-04-09T15:40:44+00:00","dateModified":"2024-04-09T15:43:29+00:00","description":"In March, the Angular community gathered for the annual edition of ngConf. Here are some of the most interesting things I learned there.","breadcrumb":{"@id":"https:\/\/ionic.io\/blog\/recapping-ngconf-2024#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/ionic.io\/blog\/recapping-ngconf-2024"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/ionic.io\/blog\/recapping-ngconf-2024#primaryimage","url":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/04\/ng-conf-recap-feature-image.png","contentUrl":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/04\/ng-conf-recap-feature-image.png","width":2240,"height":1120},{"@type":"BreadcrumbList","@id":"https:\/\/ionic.io\/blog\/recapping-ngconf-2024#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/ionic.io\/blog"},{"@type":"ListItem","position":2,"name":"Recapping ngConf 2024"}]},{"@type":"WebSite","@id":"https:\/\/ionic.io\/blog\/#website","url":"https:\/\/ionic.io\/blog\/","name":"ionic.io\/blog","description":"Build amazing native and progressive web apps with the web","publisher":{"@id":"https:\/\/ionic.io\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/ionic.io\/blog\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/ionic.io\/blog\/#organization","name":"Ionic","url":"https:\/\/ionic.io\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/ionic.io\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2020\/10\/white-on-color.png","contentUrl":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2020\/10\/white-on-color.png","width":1920,"height":854,"caption":"Ionic"},"image":{"@id":"https:\/\/ionic.io\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/x.com\/ionicframework"]},{"@type":"Person","@id":"https:\/\/ionic.io\/blog\/#\/schema\/person\/c8c92b04d526adb925ea514c619a267b","name":"Mike Hartington","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/ionic.io\/blog\/#\/schema\/person\/image\/","url":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2018\/08\/mike-headshot-2-smaller-150x150.png","contentUrl":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2018\/08\/mike-headshot-2-smaller-150x150.png","caption":"Mike Hartington"},"description":"Director of Developer Relations","sameAs":["https:\/\/twitter.com\/mhartington","https:\/\/x.com\/mhartington"],"url":"https:\/\/ionic.io\/blog\/author\/mike"}]}},"jetpack_sharing_enabled":true,"jetpack_featured_media_url":"https:\/\/ionic.io\/blog\/wp-content\/uploads\/2024\/04\/ng-conf-recap-feature-image.png","_links":{"self":[{"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/posts\/6044","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/users\/5"}],"replies":[{"embeddable":true,"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/comments?post=6044"}],"version-history":[{"count":5,"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/posts\/6044\/revisions"}],"predecessor-version":[{"id":6052,"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/posts\/6044\/revisions\/6052"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/media\/6049"}],"wp:attachment":[{"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/media?parent=6044"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/categories?post=6044"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ionic.io\/blog\/wp-json\/wp\/v2\/tags?post=6044"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}