Skip to content

Commit afcfbda

Browse files
committed
feat: answer:53 big signal performance
1 parent 95899e2 commit afcfbda

6 files changed

Lines changed: 39 additions & 35 deletions

File tree

apps/signal/53-big-signal-performance/src/app/address.component.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,9 +7,9 @@ import { UserStore } from './user.service';
77
template: `
88
<div cd-flash class="m-4 block border border-gray-500 p-4">
99
Address:
10-
<div>Street: {{ userService.user().address.street }}</div>
11-
<div>ZipCode: {{ userService.user().address.zipCode }}</div>
12-
<div>City: {{ userService.user().address.city }}</div>
10+
<div>Street: {{ userService.user.address().street }}</div>
11+
<div>ZipCode: {{ userService.user.address().zipCode }}</div>
12+
<div>City: {{ userService.user.address().city }}</div>
1313
</div>
1414
`,
1515
changeDetection: ChangeDetectionStrategy.OnPush,

apps/signal/53-big-signal-performance/src/app/job.component.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@ import { UserStore } from './user.service';
77
template: `
88
<div cd-flash class="m-4 block border border-gray-500 p-4">
99
Job:
10-
<div>title: {{ userService.user().title }}</div>
11-
<div>salary: {{ userService.user().salary }}</div>
10+
<div>title: {{ userService.user.title() }}</div>
11+
<div>salary: {{ userService.user.salary() }}</div>
1212
</div>
1313
`,
1414
changeDetection: ChangeDetectionStrategy.OnPush,

apps/signal/53-big-signal-performance/src/app/name.component.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import { UserStore } from './user.service';
66
selector: 'name',
77
template: `
88
<div cd-flash class="m-4 block border border-gray-500 p-4">
9-
Name: {{ userService.user().name }}
9+
Name: {{ userService.user.name() }}
1010
</div>
1111
`,
1212
changeDetection: ChangeDetectionStrategy.OnPush,

apps/signal/53-big-signal-performance/src/app/note.component.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import { UserStore } from './user.service';
66
selector: 'note',
77
template: `
88
<div cd-flash class="m-4 block border border-gray-500 p-4">
9-
Note: {{ userService.user().note }}
9+
Note: {{ userService.user.note() }}
1010
</div>
1111
`,
1212
changeDetection: ChangeDetectionStrategy.OnPush,

apps/signal/53-big-signal-performance/src/app/user-form.component.ts

Lines changed: 24 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -64,36 +64,40 @@ export class UserFormComponent {
6464
userStore = inject(UserStore);
6565

6666
form = new FormGroup({
67-
name: new FormControl(this.userStore.user().name, { nonNullable: true }),
68-
street: new FormControl(this.userStore.user().address.street, {
67+
name: new FormControl(this.userStore.user.name(), { nonNullable: true }),
68+
street: new FormControl(this.userStore.user.address().street, {
6969
nonNullable: true,
7070
}),
71-
zipCode: new FormControl(this.userStore.user().address.zipCode, {
71+
zipCode: new FormControl(this.userStore.user.address().zipCode, {
7272
nonNullable: true,
7373
}),
74-
city: new FormControl(this.userStore.user().address.city, {
74+
city: new FormControl(this.userStore.user.address().city, {
7575
nonNullable: true,
7676
}),
77-
note: new FormControl(this.userStore.user().note, { nonNullable: true }),
78-
title: new FormControl(this.userStore.user().title, { nonNullable: true }),
79-
salary: new FormControl(this.userStore.user().salary, {
77+
note: new FormControl(this.userStore.user.note(), { nonNullable: true }),
78+
title: new FormControl(this.userStore.user.title(), { nonNullable: true }),
79+
salary: new FormControl(this.userStore.user.salary(), {
8080
nonNullable: true,
8181
}),
8282
});
8383

8484
submit() {
85-
this.userStore.user.update((u) => ({
86-
...u,
87-
name: this.form.getRawValue().name,
88-
address: {
89-
...u.address,
90-
street: this.form.getRawValue().street,
91-
zipCode: this.form.getRawValue().zipCode,
92-
city: this.form.getRawValue().city,
93-
},
94-
note: this.form.getRawValue().note,
95-
title: this.form.getRawValue().title,
96-
salary: this.form.getRawValue().salary,
97-
}));
85+
const formValues = this.form.getRawValue();
86+
87+
this.userStore.user.name.set(formValues.name);
88+
this.userStore.user.title.set(formValues.title);
89+
this.userStore.user.salary.set(formValues.salary);
90+
91+
const address = {
92+
street: formValues.street,
93+
zipCode: formValues.zipCode,
94+
city: formValues.city,
95+
};
96+
97+
if (
98+
JSON.stringify(address) !== JSON.stringify(this.userStore.user.address())
99+
) {
100+
this.userStore.user.address.set(address);
101+
}
98102
}
99103
}

apps/signal/53-big-signal-performance/src/app/user.service.ts

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,15 @@ import { Injectable, signal } from '@angular/core';
22

33
@Injectable({ providedIn: 'root' })
44
export class UserStore {
5-
user = signal({
6-
name: 'Bob',
7-
address: {
5+
user = {
6+
name: signal('Bob'),
7+
address: signal({
88
street: '',
99
zipCode: '',
1010
city: '',
11-
},
12-
note: '',
13-
title: '',
14-
salary: 0,
15-
});
11+
}),
12+
note: signal(''),
13+
title: signal(''),
14+
salary: signal(0),
15+
};
1616
}

0 commit comments

Comments
 (0)