子路径angular2中的括号

时间:2017-01-30 16:00:32

标签: angular routing angular2-routing

如何忽略子路径中的括号。这是我的代码

{{1}}

只要id或title值中没有括号,它就可以正常工作。

如果某人在id或title值中输入括号,我该如何处理,因为它们是动态的,任何人都可以输入任何值。

请问我是否需要更多细节。感谢

1 个答案:

答案 0 :(得分:0)

那是因为辅助路由,这是angular的默认行为。它有助于将数据传递到特定的路由器出口。当我面对它时,这非常令人沮丧。

解决方案:

通过重写UrlSerializer解决它。

示例:

  

创建文件 custom-url-serializer.ts

.tabs-md .tabbar , .tabs-ios .tabbar{
    background: red;
}

,然后将其作为提供程序添加到您的 app.module.ts

import { UrlSerializer, UrlTree, DefaultUrlSerializer } from '@angular/router';

export default class CustomUrlSerialize implements UrlSerializer {

defaultUrlSerializer = new DefaultUrlSerializer();

parse(url: string): UrlTree {
    /** 
     You can replace or remove anything from the url as u want
     for ex in this case: 
     /home/hello(world) will become /home/hello%28world%29
    **/

    url = url.replace(/\(/g, '%28').replace(/\)/g, '%29');

    return this.defaultUrlSerializer.parse(url);
}

serialize(tree: UrlTree): string {

    // Decode it back to its original string
    return this.defaultUrlSerializer
               .serialize(tree)
               .replace(/%28/g, '(').replace(/%29/g,')');
}

编译后,转到网址http://localhost:4200/hello(world)时,它不会引发“ 无法匹配任何路由。URL段错误”。

希望它可以帮助某人! :-)