Объясните проблему с приведённым выше кодом Angular компонента и как её исправить:

Неверно заданы пути шаблона и стилей; сервис создаётся вручную вместо DI, а поток не типизирован. Для внешнего шаблона нужен templateUrl.

Короткий ответ

Что ответить на собеседовании

Неверно заданы пути шаблона и стилей; сервис создаётся вручную вместо DI, а поток не типизирован. Для внешнего шаблона нужен templateUrl.

Подробный разбор

Ответ с пояснениями

Условие

Объясните проблему с приведённым выше кодом Angular компонента и как её исправить:

@Component({
  selector: 'app-user',
  template: './user.component.html',
  stylesUrls: './user.component.scs',
  changeDetection: ChangeDetectionStrategy.OnPush,
})
export class CmfUserComponent {
  users$: any;

  constructor() {
    const api = new BackendService();
    this.users$ = api.getUsers();
  }
}

Ответ

Неверно заданы пути шаблона и стилей; сервис создаётся вручную вместо DI, а поток не типизирован. Для внешнего шаблона нужен templateUrl.

Минимальная правка при существующих BackendService и User:

@Component({
  selector: 'app-user',
  templateUrl: './user.component.html',
  styleUrls: ['./user.component.scss'],
  changeDetection: ChangeDetectionStrategy.OnPush,
})
export class CmfUserComponent {
  readonly users$: Observable<User[]>;
  constructor(api: BackendService) {
    this.users$ = api.getUsers();
  }
}

Путь SCSS должен совпадать с реальным файлом. В шаблоне можно использовать AsyncPipe, подключив его через imports или модуль; он уведомляет OnPush-компонент об обновлениях. Сервис должен быть зарегистрирован в DI, а getUsers — иметь соответствующий тип.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее