const currentChildUrl = route.url[0].path;
return this.counterpartyDetailsService.counterparty$.pipe(
map((it) => {
const counterpartyType: CounterpartyCounterparty.CounterpartyTypeEnum = 'IP';
const currentChildType = ROUTES.find((counterparty) => counterparty.link === currentChildUrl)?.counterpartyType;
return currentChildType && currentChildType === counterpartyType;
}),
);
}
написал вот такой гвард который висит на компонентах 2,3,4. они лежат внутри компонента 1, компонент 1 имеет сервис counterpartyDetailsService.
как дождаться пока значение придёт в переменную сервиса что бы вызвать canActivate? проблема в том что при f5 на компоненте 2 сначала отрабатывает гвард, потом иерархия компонент => данные не попадают в гвард
Никак. canActivate отрабатывает, а потом пускает к компоненту
Как тогда обойти этот кейс?
В вашем кейсе сначала canActivate, а потом можно шарить данные в сервис.
Мне что бы понять можно ли пускать польщователя на компонент надо получить данные из сервиса.
Тогда эти методы сервиса выносите в общий сервис и проверяйте доступы. По другому никак.
ты можешь инджектирвоать любой сервис в гуард и вызвать что хочешь
Ну так если я ф5 нажму то сначала отработает гвард, потом сервис. Никаких данные соответственно в гварде от сервиса не будет
Ну так в гуарде вызывайте метод, где проверяет доступ, а не переменную
Там null, потому что сначала отработает гвард, потом только создадутся компоненты
ну так сделай чтобы гард дождался данных от сервиса. там можно возвращать обс если что.
каким образом это сделать? я честно пытался уже несколько раз сегодня
Провайдинг в рут не помогает?
так а данные в поток прилетают? поставь в пайп tap().
null и прилетает
Тут вы скорее всего просто возвращаете переменную (observ), а в гуарде надо вызвать метод, после которого вы обновляете эту переменную. Если есть возможность, то создайте пример stackblitz.
Обсуждают сегодня