Angular - как подписаться на параметры дочернего маршрута, только если дочерний маршрут активирован

У меня есть разделенный дизайн экрана. Я хотел бы получить доступ к идентификатору папки из родительского маршрута, только когда дочерний маршрут активирован. Ниже приведены правильные параметры для меня, но при начальной загрузке, когда я только отображаю родительский маршрут, я получаю консольную ошибку:

Невозможно прочитать свойство 'params' из null

this.activatedRoute.firstChild.params.subscribe((urlParameters) => {
  this.folder_id = urlParameters['folderId'];
});

Есть ли способ активировать вышеуказанное только после активации ребенка?

1 ответ

Решение

Ты можешь просто попробовать

 if(this.activatedRoute.firstChild) 
   this.activatedRoute.firstChild.params.subscribe((urlParameters) => { 
     this.folder_id= urlParameters['folderId']; 
   });

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

Моя версия создаст подписку, которая отфильтрует действительные события. Имейте в виду, это, скорее всего, будет лучшим способом сделать это: /questions/31258142/activatedroute-podpisatsya-na-pervyij-dochernij-nablyudatel-parametrov/31258161#31258161

this.route.params.subscribe(() => {
    if (this.route.firstChild && this.route.firstChild.snapshot.params['folderId']) {
        this.folderId = +this.route.firstChild.snapshot.params['folderId'];
    }
});

Другие вопросы по тегам