April 9, 2024
  • All
  • Perspectives
  • Angular
  • ngconf

Recapping ngConf 2024

Mike Hartington

Director of Developer Relation...

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’s look at some of the updates and see what this means for Ionic developers using Angular.

A new output on things

Last month, I wrote 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’re able to have new APIs for input, view queries, model, and much more. But one API that is not Signal based is the new output API. 

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 @Output directive, which allows developers to create their own custom events:

@Component({...})
export class AppComponent{
  
  @Output()
  myEvent = new EventEmitter<{detail: number}>()

  someMethod(){
      this.myEvent.emit({detail: 5})
  }
}

This decorator-based API works, but can be a bit cumbersome. For Instance, it’s not enough to just attach the decorator, you still have to set the value to an EventEmitter, 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 output function:

@Component({...})
export class AppComponent{
  
  myEvent = output<{detail: number}>();

  someMethod(){
      this.myEvent.emit({detail: 5})
  }
}

Nothing about how events work has changed, this is simply aligning on API design and removing the extra new EventEmitter that developers were forced to remember. While a small change, it’s 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.

The new Wiz kid

If the name “Wiz” means nothing to you, you’re 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 “we’re collaborating,” and on social media, Sarah Drasner (Engineering Manager for both Angular & Wiz) clarified and stated the teams will eventually merge. 

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’t something that is a far off idea, there’s already a pull request from the Wiz team to add JSAction to Angular Core. There’s more about this from a later talk “What’s cooking with SSR in Angular” from Jessica Janiuk and Doug Parker that dives into how developers would take advantage of this in the future.

Sessions Worth-a Mention

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: 

Deferred Loading for Code of All Ages 

This talk from Lara Newsom covered a new lazy loading method in Angular templating API. This new @defer 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 @defer block and setting what should trigger the loading. Very helpful! 

Signals of Change

This was a talk from NgRx core member Marko Stanimirović about their investments in Signals. If you’ve been in the Angular community for any number of years, you’ve 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’ve learned while maintaining the Observable-based NgRx library, they’ve created @ngrx/signals which brings about a whole new way of managing your app’s state.

Building the next meta-framework with Angular

One of the most exciting talks for me was Brandon Roberts’s 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’s a lot of opportunity to build your next app with Analog and take advantage of its server-side capabilities, and file-based routing.  

Parting Thoughts

This year’s 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’s see what Angular becomes in 2025!


Mike Hartington

Director of Developer Relation...