2017-01-23 2 views
9

Я разрешения пользователя перед доступом фрагмент на счет моего пользователя страницы:Как вызвать маршрут распознаватель вручную

АПП-routing.component.ts

{ 
    path: 'users/:id', 
    component: UserComponent, 
    resolve: {user: UsersService}, 
    children: [ 
    {path: '', pathMatch: 'full', redirectTo: 'account'}, 
    {path: 'account', component: UserAccountComponent}, 
    {path: 'sites', component: UserSitesComponent} 
    ] 
} 

users.service.ts

resolve(route: ActivatedRouteSnapshot, r: RouterStateSnapshot) { 
    return this.getUser(route.params['id']); 
} 

пользовательского account.component.ts

ngOnInit() { 
    this.route.parent.data.subscribe(data => { 
    this.user = data['user']; 
    // Initialize the form and its validators 
    this.initForm(); 
    }); 
} 

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

Любая идея, как вызвать преобразователь вручную?

(Я использовал повторное перемещение по тому же маршруту по модулю случайного числа в качестве последнего фрагмента, но так как я взорвал свою пользовательскую страницу в маршрутах родителя/ребенка, резольвер внутри родителя больше не вызывается, когда последние изменения фрагмента)

+3

Альтернативой может быть использование службы вместо преобразователя. Пользовательская стратегия повторного использования также может работать, как указано в http: // stackoverflow.ком/вопросы/39762485/Требуется к предотвращению компонентной-оздоровительной-While-маршрутизации-в-угловой-2/39763254 # 39763254 –

ответ

0

Обычно вы не хотите запускать распознаватель маршрута вручную.

Поскольку ваш резольвер выглядит частью вашего сервиса, и все, что он делает, это вызвать this.getUser (id), вы можете легко вызвать его после внесения изменений.

Что бы я делал в этом сценарии, это мой сервис, введенный в мой класс, а затем после действия, которое обновляет запрос пользователя this.getUser (id).

Возможная реализация

export class UserAccountComponent implements OnInit { 
    userId: number; 
    constructor(private route: ActivatedRoute, private userService: UserService) {} 

    ngOnInit() { 
    this.route.params.pipe(
     do((params) => { 
     this.userId = +params['id']; 
     }), 
     take(1) 
    ); 
    } 

    doSomeChange() { 
    // this will execute a change and update the user. 
    this.userService.get(this.userId); 
    } 
} 

Примечание: Я использую код, который зависит от rxjs 5.5 Кроме того ваша служба должна быть включены в ваших поставщиков для этой работы

Смежные вопросы