将参数作为Angular中的数据的一部分

时间:2019-01-30 16:55:37

标签: angular angular-router

我正在尝试一种新的翻译机制,作为发送数据的路由的一部分,翻译后的内容将是什么,以便为多语言应用程序获取不同的URL。例如,我将拥有:

{
    path: 'bookings',
    data: { translation: 'reservas' },
    loadChildren: './booking/booking.module#BookingModule'
},

这样,我可以使用不同的语言选项正确地重定向固定的导航栏,并保留有意义的“相同网址”。为此,我有以下代码:

ngOnInit(): void {
        this.router.events.pipe(filter(event => event instanceof NavigationEnd)
        , map(() => {
          let child = this.activatedRoute.firstChild;
          while (child) {
            if (child.firstChild) {
              child = child.firstChild;
            } else if (child.snapshot.data && child.snapshot.data['translation']) {
              return child.snapshot.data['translation'];
            } else {
              return null;
            }
          }
          return null;
        })).subscribe( (t: string) => {
             this.translatedUrl = t
        });
    }

当我单击要交换语言的元素时,如果有必要,请用其翻译替换当前的URL路由。

我遇到的第一个问题是,当我拥有参数时,我无法正确处理它们,因为我不知道从已渲染的组件中获取它们的方法,因此我不知道如何获取“刷新”可能使用的activatedRoute。另外,我不知道您是否将该信息作为数据对象的一部分包含在内,我的意思是,像这样:

{
    path: ':id',
    data: { translation: 'something', id: ':id' },
    loadChildren: './something/something.module#SomethingModule'
},

很明显,我的第二个问题是考虑到所有这些代码,我不知道是否有更简单的方法来实现这一目标。

更新:

我想到的唯一其他选择是使每个组件将具有相关信息的数据发送到共享服务。但是,我在不同的地方重复使用了其中一些,并且相对的URL可能很难处理。我以为在路由中配置所有内容都是应该的

0 个答案:

没有答案