如何在应用程序路由模块中从Cookie /服务中获取价值

时间:2018-12-13 14:25:52

标签: angular

我有一个带app-routing.module和那些路线的有角网站www.domainname.com:

SELECT COUNT(data.Id)
FROM Data data
INNER JOIN
    (SELECT UserId, MAX(Date) AS MaxDate
     FROM Data
     GROUP BY UserId) g
ON data.UserId = g.UserId
AND data.Date = g.MaxDate

如果您通过www.domainname.com访问该页面,您将被重定向到www.domainname.com/homepage/en/gb页面。我会将您的语言偏好设置存储在cookie和LocaleService中,并保存在angular-l10n软件包中。

假设您将语言更改为zh-cn,它将相应地存储在语言环境服务和cookie中。

如果您下次访问www.domainname.com,我如何告诉应用程序路由模块使用cookie / locale服务中的lang / country值,而不重定向到默认的en / gb页面?

2 个答案:

答案 0 :(得分:1)

您可以使用ngx cookie service设置cookie,让我们说出cookie名称语言。

在router.changes.subscribe事件上的应用程序组件上,您可以使用简单的cookie服务get方法检查cookie,并使用router.navigate()使用cookie中的数据检查要重定向的路径

答案 1 :(得分:1)

所以你有类似的路线

const routes: Routes = [
    {
        path: "homepage/:lang/:country",
        ...
    },  
    ...
    {
        path: "**",
        redirectTo: "/homepage/en/gb",
        pathMatch: "full"
    }
]

现在根据您的问题,我将做一个简单的更改来解决它。

{
    path: "**",
    redirectTo: "/index",
    pathMatch: "full"
}

现在在索引页面中,我将为其编写代码;

Check localStorage if there is any language preference
     If found 
        redirect to "homepage/:lang/:country"
     else 
        redirect to "/homepage/en/gb"

通过这种方法,您还将获得另一个好处,例如,如果以后需要根据需要检查其他内容,可以在此处添加其他逻辑。

但是,如果我理解正确,那么您需要在用户选择一种语言之后,从下一次开始,您希望从下一次开始打开该语言特定页面。但是您要遵循的过程将特定于浏览器,希望您已经考虑过。