Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 角度布线可选参数验证_Angular_Angular2 Routing - Fatal编程技术网

Angular 角度布线可选参数验证

Angular 角度布线可选参数验证,angular,angular2-routing,Angular,Angular2 Routing,我的应用程序中有路由,其中第一个参数不是专用的。这取决于我的应用程序使用的语言 const routes: Routes = [ { path: ':lang', component: MainComponent, children: [ { path: '', loadChildren: './modules/home/home.module#HomeModule', }, {

我的应用程序中有路由,其中第一个参数不是专用的。这取决于我的应用程序使用的语言

const routes: Routes = [
  {
    path: ':lang',
    component: MainComponent,
    children: [
      {
        path: '',
        loadChildren: './modules/home/home.module#HomeModule',
      },
          {
        path: 'offers',
        loadChildren: './modules/offers/offers.module#OffersModule',
      },
      {
        path: 'blog',
        loadChildren: './modules/blog/blog.module#BlogModule',
      },
    ]
 }
]
我可以在这里进行验证吗?如果用户输入了错误的url,它将重定向到404页面

例如,
domain.com/en/blog
是有效的url,但
domain.com/anotherurl
不是


我正在使用angular的第7版

您可以为此使用通配符。如果您将其放在所有语言路径之后。路由器将从顶部开始匹配,如果没有其他匹配项,则将使用此选项

  {
        path: "**",
        redirectTo: "404",
    },

是的,这是可能的。您可以使用解析器:

const routes: Routes = [
  {
    path: ':lang',
    component: MainComponent,
    resolve: {foo: LanguageResolverService}
    children: []
解析程序的外观如下所示:

@Injectable()
export class LanguageResolverService implements Resolve<null> {
    constructor(private router: Router) {}

    public resolve(route: ActivatedRouteSnapshot, router) {

        const language = route.paramMap.get('lang');

        if(allowedLanguages.includes(language)) {
            return null;
        } else {
            this.router.navigate(['404']);
        }           
    }
}
{
path: '**', // Wildcard
component: PageNotFoundComponent
}
@Injectable()
导出类LanguageSolverService实现解析{
构造函数(专用路由器:路由器){}
公共解析(路由:ActivatedRouteSnapshot,路由器){
const language=route.paramMap.get('lang');
if(允许的语言。包括(语言)){
返回null;
}否则{
这个.router.navigate(['404']);
}           
}
}

现在,如果您的语言存在,解析程序将继续执行所需的路径。如果没有,您可以将用户重定向到您想要的任何页面。

您可以执行以下操作:

@Injectable()
export class LanguageResolverService implements Resolve<null> {
    constructor(private router: Router) {}

    public resolve(route: ActivatedRouteSnapshot, router) {

        const language = route.paramMap.get('lang');

        if(allowedLanguages.includes(language)) {
            return null;
        } else {
            this.router.navigate(['404']);
        }           
    }
}
{
path: '**', // Wildcard
component: PageNotFoundComponent
}

PageNotFoundComponent可以是您的自定义错误处理程序

这将不起作用。第一个参数是可选的,因此任何url都是匹配的。这就是为什么您将它添加到路径层次结构的底部,作为最后的选择。在我的情况下不是。在某些URL上,第二个参数也是可选的。。谢谢,无论如何,我认为解析器的方式是它是我所需要的这将不会工作。第一个参数是可选的,因此任何url都是匹配的