Гибрид UI-маршрутизатора: состояния NG2 не работают до того, как сработает состояние NG1 с компонентом NG2 - PullRequest
5 голосов
/ 04 ноября 2019

У меня большое приложение angularjs 1.7.4 с UI-маршрутизатором в режиме HTML5 с несколькими точками входа.

(В проекте используется babel 7.6 для компиляции машинного ввода и машинного ввода corejs3, поэтому я не использую angular-cli).

Я пытаюсь перенести одну из точек входа в гибридное приложение (Angular 8.2.13, @ uirouter / angular-hybrid 9.0.0).

Я следил за миграциейguide @ https://angular.io и guide на https://github.com/ui-router/angular-hybrid, и все, кажется, работает, кроме определений состояний в Angular. Они работают только ПОСЛЕ состояния angularjs с компонентом Angular.

В консоли нет ничего (с включенной трассировкой для ui-router) при попытке использовать состояния NG2 до этого.

Я застрял на этом уже несколько дней, и у меня нет идей ...

ng1hello - состояние ng1 с угловым компонентом ng2hello - угловое состояние с угловым компонентом ng1hi - состояние ng1 с угловым компонентом ng2hi -Состояние ng2 с угловой составляющей

Случай 1:

  1. Перезагрузка "/": ОК.
  2. Нажмите на ui-sref для "ng1hello". ОК
  3. Нажмите на ui-sref для "ng2hello". ОК
  4. Нажмите на ui-sref для "ng2hi". ОК

Случай 2:

  1. Перезагрузка "/": ОК.
  2. Нажмите на ui-sref для "ng2hello". НЕ ОК
  3. Нажмите на ui-sref для "ng2hi". НЕ ОК
  4. Нажмите на ui-sref для "ng1hello". ОК
  5. Нажмите на ui-sref для "ng2hello". ОК
  6. Нажмите на ui-sref для "ng2hi". ОК

Дело 3:

  1. Перезагрузка при "/ ng1hello" ОК.

Дело 4:

  1. Перезагрузить "/ ng2hello" НЕ ОК.

edit : я воспроизвел проблему в Stackblitz здесь: https://angular -hybrid-issue.stackblitz.io / https://stackblitz.com/edit/angular-hybrid-issue

1 Ответ

3 голосов
/ 08 ноября 2019

Я, очевидно, использовал неправильный метод для получения UrlService в main.ts (угловой контекст)

Было:

    import {getUIRouter} from "@uirouter/angular-hybrid";
    const urlService: UrlService = getUIRouter(platformRef.injector).urlService;

Должно было быть:

const urlService: UrlService = platformRef.injector.get(UrlService); 

https://github.com/ui-router/angular-hybrid/issues/368

...