Vue-路由

73 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 2更文挑战」的第12天 点击查看活动详情

前言

这几天遇见了一个问题,之前写的中英文翻译页面我是用的i18n这个插件的,但是最近发现盆友的一个做法是比较合适的,他的做法就是利用router-view在不同的语言环境下切换不同的组件进行渲染。

i18

这个插件是饿了么ui中自带的,用的时候需要去下载这个插件,用的时候也非常方便。使用方式可以到我的主页中查看,或者直接点击这个地址查看。juejin.cn/post/715382…

i18这个插件是好用,但是也有不足的地方。

优点:

  1. 首先就是节约项目的体积大小,他只需要你同一个页面创建一个组件就可以进行不同环境下的展示。

缺点:

1.如果我的页面需要支持多国语言的,那么是不可行的,i18只是提供了一种文本的切换,不支持超过两种语言文本的切换,(如果你有支持两种以上的解决方式,那就当我没说好了)

2.页面在用同一个组件时,里面就牵扯到样式的变动,所以你要么时添加动态样式,要么就是里利用函数进行样式的调整。

3.假设遇见一个这样的场景:翻译页面翻译人员的翻译文本,但是中文还是调用接口数据来进行展示,那么你在使用的时候很有可能导致页面的文本显示是固定的,除非是添加新的页面,新的页面用接口数据,原页面用翻译数据。

Vue-路由分配

首先看下我们一般的路由代码;

mode: 'history',
routes: [{
        path: '/',
        component: phoneLayout,
        redirect: '/',
        children: [{
                path: '/', // 首页
                name: 'Home',
                component: () =>
                    import ('./views/home/index-phone')
            },
            {
                path: '/Microservice', // 产品服务--咨询服务--微服务咨询
                name: 'Microservice',
                component: () =>
                    import ('./views/product/Microservice/indexPhone.vue')
            },
            {
                path: '/product/BeyondContainer', // 产品服务--应用管理 --容器云
                name: 'BeyondContainer',
                component: () =>
                    import ('./views/product/BeyondContainer/indexphone.vue')
            },
    {
        path: "/notFond",
        name: "notFond",
        component: () =>
            import ("./layout/phone/notFond.vue")
    }
]

可以看出我们的每一个路径都是对应的一个默认的组件,component对应一个组件,这是我们常用的方式来做路由的跳转展示。

components

// GitHub
{
    path: '/GitHub', // 博客
    name: 'GitHub',
    components: {
        a: () =>
            import ('./views/GitThub/Github.vue'),
        default: () =>
            import ('./views/GitThub/Github.vue')
    }
},
// 视频教程
{
    path: '/video', // 博客
    name: 'Video',
    components: {
        a: () =>
            import ('./views/videos/video'),
        default: () =>
            import ('./views/videos/video')
    }
},

router中还有一个属性components,它是支持多个组件的,利用这个特性我们就可以做到不同环境下的不同组件的展示。

前提是要在router-view中做出对应的判断:

app.vue:

<template>
     <div id="app"> 
        // 利用if判断做出不同的对应组件的输出展示
        <router-view v-if="$store.state.lang == 'zh'"></router-view>
        <router-view v-else name="a"></router-view>
     </div>
</template>