Как выполнить маршрутизацию непосредственно к компоненту, который я хочу, не переходя к основному компоненту - PullRequest
0 голосов
/ 20 декабря 2018

Я использую nativescript-urlhandler в своей Nativescript Aplication.Когда я ставлю маршрутизатор, мое приложение направляется сначала в основной компонент, а во второй - в компонент, который я хочу.

Я хочу перенаправить непосредственно к нужному компоненту.

У меня есть этот код routing.ts:

const routes: Routes = [
  {
    path: 'home',
    component: HomeComponent,
    canActivate: [AuthGuard],
    children: [
      {
        path: 'fp', component: FirstPageComponent
      },
      {
        path: 'profile', component: ProfileComponent
      }
    ]
  },
  {
    path: 'outsidelogin',
    component: outsideloginComponent,
    children: [
      { path: 'login', component: LoginFirstComponent },
      { path: 'register', component: RegisterComponent },
      { path: 'resetPasswordRequest/:id', component: ResetPassIdComponent }
    ]
  },

    { path: '', redirectTo: '/home/fp', pathMatch: 'full' }
];

AuthGuard

 canActivate(): boolean {
        if (this.auth.isAuthenticated()) {
            return true;
        }
        this.router.navigate(['/outsidelogin/login']);
        return false;
    }

В этом коде есть проблема.

ngOnInit() {
        if (this.auth.isAuthenticated()) {
            return true;
        }
        handleOpenURL((appURL: AppURL) => {
            console.log('Got the following appURL', appURL);
            this.myappurl = appURL
            let url_1 = this.myappurl.toString();
            let url_id = url_1.split("/").reverse()[0];
            this.resetpasss = url_id
            this.router.navigateByUrl('/outsidelogin/resetPasswordRequest/' + this.resetpasss);
        });
    }

1 Ответ

0 голосов
/ 20 декабря 2018

Используйте Router Guards, внедрите canActivate для маршрута основного компонента, если у вас есть URL для перехода от handleOpenURL, затем верните false и перейдите к новому URL.

Обновление: После просмотра вашего кода, я думаю, вы должны сохранить свой ResetPassIdComponent в легком весе.Кажется, он вложен в несколько выходов маршрутизатора страницы, попробуйте сохранить этот компонент / копию компонента на корневом уровне для лучшей и более быстрой инициализации.

Замените приведенный ниже код в auth.guard.ts и удалите код обработки URL изкомпонент приложения.

import { Injectable } from '@angular/core';
import { Router, CanActivate } from '@angular/router';
import { LoginService } from '~/services/login';
import { handleOpenURL, AppURL } from 'nativescript-urlhandler';

@Injectable()
export class AuthGuard implements CanActivate {

    constructor(private router: Router, private auth: LoginService) { }

    canActivate(): boolean {
        if (this.auth.isAuthenticated()) {
            return true;
        }

        const timeOut = setTimeout(() => {
            handleOpenURL(null);
            this.router.navigate(['/test/login']);
        }, 100);
        handleOpenURL((appURL: AppURL) => {
            if (timeOut) {
                clearTimeout(timeOut);
                console.log('Got the following appURL', appURL);
                let url_1 = appURL.toString();
                let url_id = url_1.split("/").reverse()[0];
                console.log(url_id);
                this.router.navigateByUrl('/test/questions/' + url_id);
            }
        });
        return false;
    }

}
...