• Love outdoor activities like hiking, geocaching, cycling • In my free time developing home projects • Graduated as a Computer Science Engineer • Main orientation is frontend • Working with Angular since 2018
learning at scale • Increase productivity of data scientists and ML engineers • Improve time to value Integration with Data Services Experiment Train Deploy Datasets Experiments Vertex SDK Training Vizier NAS Prediction Pipelines Workbench Custom workflow No code / low code workflow Matching Engine MLOps Data Science tool kit BigQuery Spark Cloud Storage Vision Video Language Speech Forecast BigQuery ML Translation Tables Spanner Model Monitoring Explainable AI Feature Store ML Metadata Model Registry Model Evaluation Workflows Tabnet Streaming Ingestion BI AutoML BigQuery A Unified ML Platform for Solving All Business Problems Generative AI Studio | Generative AI APIs | Model Garden
ChangeDetectorRef detectChanges refreshView executeTemplate detectChanges for child components Handles all lifecycle hooks except onDestroy Runs templateFn in creation and update mode Runs detectChanges for every child component
across async tasks • First introduced in 2013 at the AngularJS conf • Originally created by Victor Savkin, a software engineer at Google. He was inspired by the concept of zones from the Erlang programming language. • In 2016, Zone.js was released as a standalone JavaScript framework • Still actively developed and maintained by the Angular team at Google • Mainly used for handle trigger change detection
ChangeDetectorRef detectChanges refreshView executeTemplate detectChanges for child components Handles all lifecycle hooks except onDestroy Runs templateFn in creation and update mode Runs detectChanges for every child component
smaller applications • Better support for third-party libraries Cons • Reduced performance for large applications • Reduced predictability for complex applications • Reduced support for reactive programming
@Input changes • Event binding, output binding, or @HostListener • The component was explicitly marked for check via ChangeDetectorRef.markForCheck() • async pipe markForCheck the component every time when new value emitted • Schedule change detection after the current execution context finished
template. Angular can’t track the function result and it re renders the template in every change detection cycle. • Having a parent component with change detection strategy OnPush and a child component with strategy Default could result in an outdated view, as change detection potentially could not run on the child component.
~2 KB • Granularly tracks how and where your state is used throughout an application, allowing the framework to optimize rendering updates. • May change before they are stable • Wrapper around a value that can notify interested consumers when that value changes • Can contain any value, from simple primitives to complex data structures
derivation function • The doubleCount signal depends on count • Derivation function does not run to calculate its value until the first time doubleCount is read. • Once calculated, this value is cached • Computed signals are not writable signals
one or more signal values change • Similar to computed signals, effects keep track of their dependencies dynamically, and only track signals which were read in the most recent execution • Effects always execute asynchronously, during the change detection process • Avoid using effects for propagation of state changes.
when it changes, either for analytics or as a debugging tool • Keeping data in sync with window.localStorage • Adding custom DOM behavior that can't be expressed with template syntax • Performing custom rendering to a <canvas>, charting library, or other third party UI library
The easiest way to provide this is to call effect within a component, directive, or service constructor • Alternatively, the effect can be assigned to a field • Outside of the constructor, you can pass an Injector to effect via its options
destroyed • Effects return an EffectRef that can be used to destroy them manually, via the .destroy() operation • This can also be combined with the manualCleanup
the provided signal in an effect. When the signal value changes, the effect will emit the new value • toSignal function subscribes to the observable immediately • ensure that it is being called in an injection context
• Lack of third party library support • Not chainable like pipe • No operators available (map, tap, throttleTime, debounceTime) • Solves different problem
trigger changeDetection for every component in signal changes OnPush • Similar as Observables, mark component dirty when signal changed but without async pipe • Tracks the signal as a dependency of that component
Angular 18-19 • Inputs and Outputs also signals • Zoneless application • ngAfterContentInit, ngAfterViewChecked and ngAfterContentChecked lifecycle hooks being removed • Granularity of change detection