---
name: angular-persist
description: Gate Angular UI on Persist hydration with useHydrated (readonly Signal). Call inside an injection context; use when avoiding flash of default state on async backends.
license: MIT
metadata:
  type: framework
  library: "@stainless-code/persist"
  library_version: "0.4.1"
  framework: "angular"
requires:
  - persist
sources:
  - stainless-code/persist:src/adapters/frameworks/angular.ts
---

# Angular hydration gate

`@stainless-code/persist/frameworks/angular` returns a readonly `Signal<boolean>`. A real signal needs an **injection context** (`effect()`); null/undefined returns a shared `signal(true)` without `effect()`.

## Install

```bash
bun add @stainless-code/persist @angular/core
```

Peer: `@angular/core` `>=17.0.0`.

## Minimal wiring

```ts
import { useHydrated } from "@stainless-code/persist/frameworks/angular";

export class PrefsComponent {
  hydrated = useHydrated(prefsHydration);
}
```

```html
@if (hydrated()) {
<prefs-panel />
} @else {
<skeleton />
}
```

## Common mistakes

- **Calling outside injection context.**
- **Treating the signal as store state.**
- **SSR / null signal** — both surface as hydrated `true`.

## API surface

- `useHydrated(signal) → Signal<boolean>` (readonly)
