Получить вставленную зависимость в неангулярном классе - PullRequest
0 голосов
/ 05 ноября 2018

У меня есть текущий (и упрощенный) класс:

export class NavigationItem {
  constructor(
    private router: Router
  ) {}

  navigateTo() { this.router.navigate([this.id]); }
}

Мне бы не хотелось вводить себе маршрутизатор каждый раз, когда я объявляю новый экземпляр этого класса.

Есть ли способ сделать это? Я думал о чем-то вроде

export class NavigationItem {

  @Inject(forwardRef(() => Router))
  private _router: Router;

  constructor() {}

  navigateTo() { this.router.navigate([this.id]); }
}

Но, похоже, это не работает. Любая идея ?

1 Ответ

0 голосов
/ 05 ноября 2018

Вы можете создать фабричный сервис, который обрабатывает создание NavigationItem s и связывает их с Router. Вот пример того, как может выглядеть класс NavigationItemFactory:

// imports

@Injectable({ providedIn: 'root' })
export class NavigationItemFactory {
    constructor(private router: Router) { }

    createItem(): NavigationItem {
        return new NavigationItem(this.router);
    }
}

Поскольку здесь используется функция providedIn Angular 6+, вам не нужно объявлять этот фабричный класс в модуле, что делает его легко перемещаемым между проектами.

Везде, где вы хотите создать эти элементы в вашем проекте, просто возьмите зависимость от NavigationItemFactory и соответственно используйте ее функцию createItem. Конечно, это все еще зависимость, которая вам понадобится в вашем проекте, но, по крайней мере, теперь это зависимость от вашего собственного типа, а не от Router.

...