Меня мучает вопрос: где мне найти свои рассчитанные свойства в угловом проекте?
Например:
У меня есть модель, сервис для получения модели и компонент для показа модели.
person.model.ts:
export class Person {
firstName: string;
lastName: string;
}
person.service.ts:
export class PersonService {
// inject http: HttpClient
get(id) {
return this.http.get<Person>(`api-endpoint/person/${id}`);
}
}
person.component.ts
@Component({
selector: 'app',
template: `
<div>
<input [value]='person.firstName'>
<input [value]='person.lastName'>
</div>
`,
providers: [ PersonService ]
})
export class AppComponent {
person: Person;
// inject personService: PersonService
ngOnInit() {
personService.get(1).subscribe(p => this.person = p);
}
}
А теперь мне нужно fullName
, чтобы отобразить его в шаблоне под моими полями ввода.
Вариант 1. Если вы гуглите «рассчитанные свойства углов», вы, скорее всего, найдете примеры с вычисленными свойствами в самом компоненте.
@Component({
selector: 'app',
template: `
<div>
<input [value]='person.firstName'>
<input [value]='person.lastName'>
<span>{{ fullName }}</span>
</div>
`,
providers: [ PersonService ]
})
export class AppComponent {
person: Person;
get fullName() {
return `${this.person.firstName} ${this.person.lastName}`
}
// inject personService: PersonService
ngOnInit() {
personService.get(1).subscribe(p => this.person = p);
}
}
Но это ли правильное место для такого кода?
Что если мы хотели бы повторно использовать это свойство в других компонентах, службах и т. Д.?
Вариант 2. Я лично хочу продлить person.model.ts
.
export class Person {
firstName: string;
lastName: string;
get fullName(): string {
return `${this.firstName} ${this.lastName}`
}
}
@Component({
selector: 'app',
template: `
<div>
<input [value]='person.firstName'>
<input [value]='person.lastName'>
<span>{{ person.fullName }}</span>
</div>
`,
providers: [ PersonService ]
})
export class AppComponent {
person: Person;
// inject personService: PersonService
ngOnInit() {
personService.get(1).subscribe(p => this.person = p);
}
}
Но тогда мы сталкиваемся с другой проблемой. Наш personService
возвращает объект вообще без этого получателя.
Так что мне делать? Нужно ли создавать новый экземпляр person.model.ts
, а затем присваивать ему наш ответ, или, может быть, мне вообще нужна другая модель, что-то вроде person.view-model.ts
?
Спасибо за ваше время: D