Сервисный цикл (уничтожить сервис) - PullRequest
0 голосов
/ 09 ноября 2018

Мое приложение имеет следующую архитектуру: enter image description here

Как только пользователь войдет в систему, я перехожу к MainModule (ленивый), где я регистрирую службы, используемые в MainModule компонентах. CarService кэширует результат веб-службы, поэтому, если пользователь выходит из системы, эта служба должна быть уничтожена. Когда пользователь выходит из системы, я перехожу к LoginModolue .

Я думал, что при переходе к LoginModule , MainModule был бы уничтожен (на самом деле я регистрирую его в MainModule , а не в AppModule) но я заметил, что если я снова войду в систему, старый кэш все еще там. Это нормально? Не следует уничтожать службы, предоставляемые в MainModule при переходе к LoginModule ?

Ответы [ 2 ]

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

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

Однако вы можете поместить провайдера в представление основного компонента:

@NgModule({
  declarations: [
     MainComponent
  ]
})
export class MainModule {}

@Component({
  //...
  providers: [ CarService ]
})
export class MainComponent {}

Это уничтожит экземпляр CarService, когда MainComponent будет уничтожен

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

Дело не в этом. Переход на какой-либо другой модуль не будет означать, что ранее Lazy Loaded Module будет уничтожен. Это все еще осталось бы. Вот почему Angular не запрашивает блок этого Lazy Loaded Module, когда мы снова пытаемся перейти к этому модулю.

Услуга также останется в памяти. Только когда пользователь вручную перезагрузит приложение, служба будет повторно инициализирована.

Вам придется вручную очистить кеш, прежде чем переходить пользователя к маршруту /login. Идеальным местом для этого может быть ngOnDestroy компонента, от которого вы перемещаетесь.

...