angular-signals
ALWAYS use when working with Angular Signals, signal-based reactivity, computed signals, or effect APIs in Angular applications.
How do I install this agent skill?
npx skills add https://github.com/oguzhan18/angular-ecosystem-skills --skill angular-signalsIs this agent skill safe to install?
- Gen Agent Trust Hubpass
The skill provides comprehensive documentation and best practices for the Angular Signals API. It contains technical guides and links to official Angular documentation and trusted community resources. No security issues, malicious code, or suspicious patterns were detected.
- Socketpass
No alerts
- Snykpass
Risk: LOW · No issues
What does this agent skill do?
Angular Signals
Version: Angular 16+ (2025) Tags: Reactivity, State Management, Signals API
References: Angular Signals • API Reference
API Changes
This section documents version-specific API changes.
-
NEW: Angular 19 Resource API — New way to handle async data with built-in loading/error states
-
NEW: linkedSignal() — Creates a signal linked to external sources with getter/setter source
-
NEW: Signal inputs — Use
input()andinput.required()for reactive component inputs -
NEW:
toSignal()andtoObservable()— Bridge between RxJS and Signals -
NEW:
effect()improvements — Better cleanup withonCleanupcallback -
NEW: Zoneless change detection — Works seamlessly with Signals
Best Practices
- Use
computed()for derived state — Never useeffect()for deriving values
// ✅ DO THIS - derived state
totalPrice = computed(() => {
return this.items().reduce((sum, item) => sum + item.price, 0);
});
// ❌ DON'T - side effects in computed
badComputed = computed(() => {
const data = this.data();
this.logService.log(data); // Side effect - don't do this!
});
- Use
signal()for writable state
count = signal(0);
// Update with set()
count.set(5);
// Update with update()
count.update(value => value + 1);
// Update with mutate() for objects
user.update(u => ({ ...u, name: 'New Name' }));
- Use
effect()only for side effects
effect(() => {
analytics.track('cart-updated', {
itemCount: this.items().length
});
});
- Always cleanup effects to prevent memory leaks
effect((onCleanup) => {
const timer = setTimeout(() => { /* ... */ }, 300);
onCleanup(() => clearTimeout(timer));
});
- Use Signal Inputs instead of traditional @Input()
// Modern signal inputs (Angular 17+)
userId = input<string>('');
user = input.required<User>();
// Computed based on input
greeting = computed(() => `Hello, ${this.user()?.name}`);
- Use
toSignal()for RxJS to Signal conversion
// Convert Observable to Signal
users = toSignal(this.http.get('/api/users'), { initialValue: [] });
-
Don't nest effects — Can cause performance issues
-
Use equality functions for complex object comparisons
user = signal<User | null>(null, {
equal: (a, b) => a?.id === b?.id
});
- Use Signals for UI state, RxJS for complex async — Signals and RxJS serve different purposes
How can the creator link this skill?
Add the canonical catalog link to the repository README so users can inspect current installs and available audits. The publishing guide covers the complete discovery path.
<a href="https://skillzs.dev/skills/oguzhan18/angular-ecosystem-skills/angular-signals">View angular-signals on skillZs</a>