Loading...
Loading...
ALWAYS use when working with Angular Signals, signal-based reactivity, computed signals, or effect APIs in Angular applications.
npx skill4agent add oguzhan18/angular-ecosystem-skills angular-signalsinput()input.required()toSignal()toObservable()effect()onCleanupcomputed()effect()// ✅ 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!
});signal()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' }));effect()effect(() => {
analytics.track('cart-updated', {
itemCount: this.items().length
});
});effect((onCleanup) => {
const timer = setTimeout(() => { /* ... */ }, 300);
onCleanup(() => clearTimeout(timer));
});// Modern signal inputs (Angular 17+)
userId = input<string>('');
user = input.required<User>();
// Computed based on input
greeting = computed(() => `Hello, ${this.user()?.name}`);toSignal()// Convert Observable to Signal
users = toSignal(this.http.get('/api/users'), { initialValue: [] });user = signal<User | null>(null, {
equal: (a, b) => a?.id === b?.id
});