Как перенаправить на новый компонент в ngOnInit

Я создаю компонент Angular, к которому пользователь получает доступ, щелкнув ссылку, отправленную на его электронную почту, которая содержит его идентификатор пользователя. Мне нужно сделать так, чтобы он автоматически перенаправлял их на страницу администратора, если они уже завершили свою регистрацию. Однако кажется, что использование router.navigate внутри события ngOnInit не работает, что приводит к ошибке

Ошибка: не перехвачено (в обещании): ошибка: BrowserModule уже загружен.

Вот код:

ngOnInit() {
this.activatedroute.params.subscribe(params => {
  this.API.getUserData(params['id']).subscribe(res => {
    console.log(res);
    this.item = res;
    sessionStorage.setItem('USER_ID', this.item._id);
    if (res["registry_complete"]){
      this.router.navigate(['/user-admin']);
    } else {
    }
  });
});
}

Как мне этого добиться?

РЕДАКТИРОВАТЬ: Несмотря на то, что говорится об ошибке, BrowserModule импортируется только один раз в основном модуле. Если "this.router.navigate (['/ user-admin']);" удаляется, код работает нормально. Он также отлично работает вне функций ngOnInit или конструктора. Я подозреваю, что причина этой ошибки заключается в том, что router.navigate пытается снова загрузить основной модуль, и, поскольку страница находится в процессе загрузки, она импортирует BrowserModule дважды, но если это так, то как делает один редирект таким образом в Angular?

РЕДАКТИРОВАТЬ: На самом деле это была проблема в модуле маршрутизации пользователя и администратора.


person IndigoFenix    schedule 22.07.2019    source источник
comment
Можете ли вы опубликовать свой app.module?   -  person Robert garcia    schedule 22.07.2019
comment
вы должны выполнить это внутри конструктора вместо ngOnInit.   -  person Radwojt    schedule 22.07.2019
comment
@Radwojt То же самое происходит, если это делается внутри конструктора.   -  person IndigoFenix    schedule 22.07.2019
comment
Эта ошибка не имеет ничего общего с ngOnInit. Найдите в своем приложении BrowserModule. Его следует импортировать только один раз. Если это происходит дважды, удалите предыдущее появление,   -  person Saurabh Tiwari    schedule 22.07.2019
comment
@SaurabhTiwari BrowserModule импортируется только один раз. Если удалить this.router.navigate, все будет нормально. Если this.router.navigate запускается вне NgOnInit или конструктора, он также работает нормально.   -  person IndigoFenix    schedule 22.07.2019
comment
@IndigoFenix ​​Хорошо. В таком случае, по какой причине вы не отправляете ссылку непосредственно на требуемый компонент в своем электронном письме. Вы также можете проверить все свои условия там.   -  person Saurabh Tiwari    schedule 22.07.2019
comment
@SaurabhTiwari Удобство для пользователя. Вы хотите сказать, что Angular не может обрабатывать простое перенаправление страницы?   -  person IndigoFenix    schedule 22.07.2019
comment
Точно нет. Ошибка, которой вы поделились, связана с загрузкой модулей. Можно проверить всю вашу маршрутизацию и объявление модуля. В любом случае, если бы моим мотивом было открыть страницу для пользователя, я бы предпочел перенаправить пользователя непосредственно на эту страницу, а не отображать навигацию браузера (изменение маршрута) после щелчка.   -  person Saurabh Tiwari    schedule 22.07.2019


Ответы (2)


Ошибка говорит о том, что каким-то образом вы импортировали BrowserModule в свои приложения более одного раза. Как указано в docs, модуль BrowserModule должны быть импортированы в корневой модуль приложения:

Не импортируйте BrowserModule ни в какой другой модуль. Модули функций и модули с отложенной загрузкой должны вместо этого импортировать CommonModule. Им нужны общие директивы. Им не нужно переустанавливать поставщиков для всего приложения.

Кроме того, NoopAnimationsModule и BrowserAnimationsModule содержат BrowserModule, поэтому, если вы импортируете один из них, вам необходимо удалить импорт BrowserModule (если он у вас есть).

person Vadi    schedule 22.07.2019
comment
BrowserModule импортируется только один раз в корневой модуль. Я подозреваю, что попытка перенаправления при инициализации страницы может вызвать корневой модуль (поскольку он пытается загрузить новый компонент), и выполнение этого, пока страница находится в процессе загрузки, может вызвать его импорт. дважды, вызывая эту ошибку. Но если это так, как выполнить перенаправление на новую страницу? - person IndigoFenix; 22.07.2019
comment
IndigoFenix, можете ли вы добавить в свой вопрос модуль маршрута для загрузки компонента по пути /user-admin и модуль, в который этот компонент импортирован - person Vadi; 22.07.2019
comment
Вы правы, это была проблема в модуле маршрутизации пользователь-админ. - person IndigoFenix; 22.07.2019

Проверьте, какие модули вы импортируете .module.ts

Если вы используете BrowserAnimationsModule

поместите его перед BrowserModule

и проверьте, что такое импорт субмодулей

person Chanaka Weerasinghe    schedule 22.07.2019