Powerful asynchronous state management for Angular using signals
Angular Query provides first-class support for Angular applications using Angular’s modern signals API. It enables you to fetch, cache, and update asynchronous data with zero configuration while maintaining full type safety.
Angular Query is currently in experimental stage. Breaking changes may occur in minor and patch releases. Lock your version to a patch-level version if using in production.
Angular Query is the Angular adapter for TanStack Query. It brings powerful and flexible server state management to Angular applications through a signal-based API that integrates seamlessly with Angular’s reactivity system.
Angular Query leverages Angular’s signals for automatic reactivity. The function passed to injectQuery runs in a reactive context, similar to Angular’s computed:
import { Component, signal } from '@angular/core'import { injectQuery } from '@tanstack/angular-query-experimental'@Component({ selector: 'app-todos', template: ` <input [(ngModel)]="filter" placeholder="Filter todos" /> @for (todo of query.data(); track todo.id) { <div>{{ todo.title }}</div> } `})export class TodosComponent { filter = signal('') query = injectQuery(() => ({ queryKey: ['todos', this.filter()], queryFn: async () => { const response = await fetch(`/api/todos?filter=${this.filter()}`) return response.json() }, // Query is disabled when filter is empty enabled: !!this.filter() }))}
When the filter signal changes, the query automatically updates with the new key and refetches data.