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都是匹配的