Skip to content

Commit 560ad55

Browse files
committed
feat(Answer:65): use linkedSignal to set value of userModel
1 parent 5113d8b commit 560ad55

1 file changed

Lines changed: 17 additions & 18 deletions

File tree

apps/forms/65-signal-form-edition/src/app/user-form.component.ts

Lines changed: 17 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
11
import {
22
ChangeDetectionStrategy,
33
Component,
4-
effect,
54
inject,
65
input,
7-
signal,
6+
linkedSignal,
87
} from '@angular/core';
98
import { rxResource } from '@angular/core/rxjs-interop';
109
import { form, FormField, min, required, submit } from '@angular/forms/signals';
@@ -134,11 +133,22 @@ export class UserFormComponent {
134133
defaultValue: undefined,
135134
});
136135

137-
userModel = signal<Omit<User, 'id'>>({
138-
firstname: '',
139-
lastname: '',
140-
age: 0,
141-
grade: 0,
136+
userModel = linkedSignal<Omit<User, 'id'>>(() => {
137+
const hasValue = this.userResource.hasValue();
138+
const user = this.userResource.value();
139+
140+
if (hasValue && user) {
141+
// eslint-disable-next-line @typescript-eslint/no-unused-vars
142+
const { id, ...rest } = user;
143+
return rest;
144+
} else {
145+
return {
146+
firstname: '',
147+
lastname: '',
148+
age: 0,
149+
grade: 0,
150+
};
151+
}
142152
});
143153

144154
userSignalForm = form(this.userModel, (schemePath) => {
@@ -149,17 +159,6 @@ export class UserFormComponent {
149159
required(schemePath.grade);
150160
});
151161

152-
constructor() {
153-
effect(() => {
154-
const userValue = this.userResource.value();
155-
if (userValue) {
156-
this.userModel.set(userValue);
157-
} else {
158-
this.userModel.set({ firstname: '', lastname: '', age: 0, grade: 0 });
159-
}
160-
});
161-
}
162-
163162
onSubmit(event: Event): void {
164163
event.preventDefault();
165164

0 commit comments

Comments
 (0)