Угловой подборщик детей не работает - PullRequest
0 голосов
/ 26 июня 2018

Я хочу реализовать некоторые URL, такие как «домен / имя пользователя / временная шкала».Имя пользователя - "string.string", поэтому я использовал UrlSegment для сопоставления строки с помощью regx.Теперь, когда я перехожу к «домену / имени пользователя», он работает, но когда я перехожу к «домену / имени пользователя / настройкам», он вообще не работает.

Любая помощь приветствуется.Если есть подобный подход, я приветствую его.

Вот мой модуль маршрутизации приложений

import { NgModule } from '@angular/core';
import { RouterModule, Routes, UrlSegment, UrlMatcher, UrlMatchResult } from '@angular/router';
import { TimelineComponent } from './components/profile/timeline/timeline.component';
import { AboutComponent } from './components/profile/about/about.component';
import { FollowersComponent } from './components/profile/followers/followers.component';

export function userMatch (url: UrlSegment[]): UrlMatchResult{
    if (url.length === 1) {
        if (url[0].path.match(/^[a-z]*\.[a-z0-9_]*$/)) {
            return ({
                    consumed: url
            });
        } else {
            return null;
        }
    } else if(url.length === 2) {
        if (url[0].path.match(/^[a-z]*\.[a-z0-9_]*$/)) {
            return ({
                    consumed: url, 
                    posParams: {timeline: url[1], about: url[1], settings: url[1] }
            });
        } else {
            return null;
        }       
    }
}

const appRoutes: Routes = [
    /**
     * @route `PROFILE` 
     * @lock `CanActivate`
     *  Only if logged in can access this page
     */
    {
        matcher: userMatch, 
        component: ProfileComponent,
        canActivate: [AuthGuard],
        children: [
            { path: '', component: TimelineComponent },
            { path: 'timeline', component: TimelineComponent },
            { path: 'about', component: AboutComponent },
            { path: 'settings', component: SettingsComponent }
        ]
    }
]

@NgModule({
    imports: [
        RouterModule.forRoot(appRoutes)
    ],
    exports: [
        RouterModule
    ]
})export class AppRoutingModule { }

1 Ответ

0 голосов

См. https://github.com/angular/angular/issues/23866 Вы должны вернуть в использованном параметре использованные сегменты URL.

Например: Вы хотите совпадать с первым и вторым сегментом URL (/ category / categoryId) url: / category / categoryId / products Функция mathcer:

export function categoryMatcher(url: UrlSegment[]) {
  return url.length === 3 ? ({consumed: url.slice(0,2)}) : null;
} 
...