Почему мы используем @Injectable ({предоставленный: 'root'}) для достижения класса? - PullRequest
1 голос
/ 11 апреля 2020

У меня есть собственный класс для создания собственного валидатора. чтобы использовать этот валидатор в FormGroup, я делаю так:

@Injectable({ providedIn: 'root' })
export class MatchPassword {

}

в другом классе

import { MatchPassword } from '../validators/match-password';

export class SignupComponent implements OnInit {
  authForm = new FormGroup(
    {
      username: new FormControl('')
    },
    {
      validators: [this.match.validate],
    }
  );

  constructor(private match: MatchPassword) {}

  ngOnInit(): void {}
}

почему я не использую как

const object = new MatchPssword ();

для создания экземпляра?

1 Ответ

1 голос
/ 11 апреля 2020

Вам не нужно создавать экземпляр, вам нужно повторно использовать экземпляр, от которого зависит ваш компонент, и среду, созданную при запуске.

Невозможно обмениваться информацией между компонентами используя new, вместо этого, благодаря внедрению зависимостей, вы можете сделать что-то вроде этого:

@Injectable({provideIn: 'root'})
export class MyService() {
  object: T = null;
  save(object: T) {
    this.object = object;
  }

  retrieve(): T {
    return this.object;
  }
}

И вы можете использовать save в компоненте и retrieve в другом компоненте, ограничивая связь.

Используя new, вместо этого вы получите два экземпляра MyService.object. В этом случае сервисы очень похожи на синглтоны, но они не синглтоны, поскольку управляются фреймворком, а не разработчиком.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...