Javascript 基于条件切换case-vue的同一组件中的多个不同嵌套路由

Javascript 基于条件切换case-vue的同一组件中的多个不同嵌套路由,javascript,vue.js,vuejs2,Javascript,Vue.js,Vuejs2,我正在实现一个players模块。在这里,第一页有3张路由卡。每一张卡都被路由到下一页,下一页有各自父卡的多张路由卡 示例 1. 1st level Card( Player Name) -- > 2nd level Cards(Players info, Player Statistics, Records) --> upto 3rd level routing 2. 1st level Card(Grounds) -- > 2nd level Cards(Gr

我正在实现一个players模块。在这里,第一页有3张路由卡。每一张卡都被路由到下一页,下一页有各自父卡的多张路由卡

示例

  1.  1st level Card( Player Name) -- > 2nd level Cards(Players info, Player Statistics, Records) --> upto 3rd level routing

  2.  1st level Card(Grounds) -- > 2nd level Cards(Grounds info, Match played, Records) --> upto 3rd level routing

  3.  1st level Card(Match Information) -- > 2nd level Cards(Match info, match history, community resources) --> upto 3rd level routing
    <template>
    <vu-page background="gray">
        <vu-container>
            <vu-row-control class="mt-3">
                 <vu-box-control :list="cardLists" @click="cardAction"></vu-box-control>
            </vu-row-control>
        </vu-container>
    </vu-page>
</template>

<script>
export default {
    data() {
        return {
            cardLists: [
                { heading: ‘PlName', content:’Players Name and information',to:'/players/name'},
                { heading: ‘Grnd',  content:  ‘Ground Information', to:'/players/grounds' },
                { heading: ‘Infos', content:  ‘Match Informations', to:'/players/info' }
            ]
        };
    },
    methods: {
        cardAction(value) {
            if(value) {
                this.$router.push(value.to);
            }
        }
    }
};
</script>
现在,我已经创建了许多具有各自路线的组件。但是,我想创建一个组件,根据条件来路由所有不同的路由($route.path)

现在,这是我的routes.js

{
    name: 'Players',
    path: '/players',
    component: PageLayout,
    meta: {
        topNavigation: true
    },
    redirect: { path: '/players/entry' },
    children: [
        {
            name: 'PlayersEntryPage',
            path: 'entry',
            component: PlayersEntryPage
        },
        {
            name: 'PlayersName',
            path: 'name',
            component: PlayersName
        },
        {
            name: 'Grounds',
            path: 'grounds',
            component: Grounds
        },
        {
            name: 'MatchInformation',
            path: 'info',
            component: MatchInformation

        }
    ]
}
这是第一个主页,然后是路由的第一级后续卡组件

playerEntryPage

  1.  1st level Card( Player Name) -- > 2nd level Cards(Players info, Player Statistics, Records) --> upto 3rd level routing

  2.  1st level Card(Grounds) -- > 2nd level Cards(Grounds info, Match played, Records) --> upto 3rd level routing

  3.  1st level Card(Match Information) -- > 2nd level Cards(Match info, match history, community resources) --> upto 3rd level routing
    <template>
    <vu-page background="gray">
        <vu-container>
            <vu-row-control class="mt-3">
                 <vu-box-control :list="cardLists" @click="cardAction"></vu-box-control>
            </vu-row-control>
        </vu-container>
    </vu-page>
</template>

<script>
export default {
    data() {
        return {
            cardLists: [
                { heading: ‘PlName', content:’Players Name and information',to:'/players/name'},
                { heading: ‘Grnd',  content:  ‘Ground Information', to:'/players/grounds' },
                { heading: ‘Infos', content:  ‘Match Informations', to:'/players/info' }
            ]
        };
    },
    methods: {
        cardAction(value) {
            if(value) {
                this.$router.push(value.to);
            }
        }
    }
};
</script>

导出默认值{
数据(){
返回{
卡片列表:[
{标题:'PlName',内容:'Players Name and information',收件人:'/Players/Name'},
{标题:'Grnd',内容:'Ground Information',收件人:'/players/grounds'},
{标题:'Infos',内容:'Match Informations',收件人:'/players/info'}
]
};
},
方法:{
信用卡行动(价值){
如果(值){
这是$router.push(value.to);
}
}
}
};
一级组件(玩家名称)->二级组件卡

    <template>
    <vu-page background="gray">
        <vu-container>
            <vu-row-control class="mt-3">
                 <vu-box-control :list="cardLists" @click="cardAction"></vu-box-control>
            </vu-row-control>
        </vu-container>
    </vu-page>
</template>

<script>
export default {
    data() {
        return {
            cardLists: [
                { heading: ‘Players Personal Info', to:’/players/name/pinfo'},
                { heading: ‘Players Statistics', to:'/players/name/statistics' },
                { heading: ‘Players Records',to:’/players/name/records' }
            ]
        };
    },
    methods: {
        cardAction(value) {
            if(value) {
                this.$router.push(value.to);
            }
        }
    }
};
</script>

导出默认值{
数据(){
返回{
卡片列表:[
{标题:'玩家个人信息',收件人:'/Players/name/pinfo'},
{标题:'Players Statistics',至:'/Players/name/Statistics'},
{标题:'Players Records',至:'/Players/name/Records'}
]
};
},
方法:{
信用卡行动(价值){
如果(值){
这是$router.push(value.to);
}
}
}
};
框控制代码片段

    <template>
    <div class="box-wrapper">
        <div v-for="(items, i) in boxes" :key="'box-row-' + i" class="box-container">
            <vu-button-control
                v-for="item in items"
                :key="item.heading"
                plain
                class="box"
                :to="item.to"
                @click="click($event, item)"
            >
                <vu-row-control>
 <vu-column-control  cols="10">
                        <h1 class="label">{{ item.heading }}</h1>
                        <p class="body_content">{{ item.content }}</p>
                    </vu-column-control>

                    <vu-column-control cols="2">
                        <vu-button-control @click.stop=“addFavouriteClick(item)">
                        </vu-button-control>
                    </vu-column-control>
                </vu-row-control>
            </vu-button-control>
        </div>
    </div>
</template>

{{item.heading}}

{{item.content}


对不起,我不确定我是否完全理解了您的问题,但我试图为我理解的问题提供一个解决方案:

  • 您有三个级别的路由
  • 所有管线都有不同的组件
  • 您希望有一个组件来处理路由
为了实现这一点,我将扩展
路由器
,将
子例程
道具传递给通用组件:

const PlayersInfo={
模板:`
玩家信息组件
`
}
康斯特球员统计={
模板:`
播放器统计组件
`
}
常量PlayerRecords={
模板:`
播放器记录组件
`
}
const GroundsInfo={
模板:`
地面信息组件
`
}
常数={
模板:`
匹配播放的组件
`
}
常数地面记录={
模板:`
地面记录部分
`
}
常量匹配信息={
模板:`
匹配信息组件
`
}
常数匹配历史={
模板:`
匹配历史组件
`
}
常量社区资源={
模板:`
社区资源部分
`
}
//RoutingControl可以在其内部调用
常数路由控制={
道具:[“子例程”],
模板:`
{{子例程}}

` } 常数路由=[{ 名称:'根', 路径:“/”, 重定向:{ 路径:'/players/entry', }, }, { 姓名:'玩家', 路径:'/players', 组成部分:路由控制, 元:{ topNavigation:正确 }, 重定向:{ 路径:'/players/entry' }, 道具:(路线)=>({ 子例程:GetRouteName(“玩家”) }), 儿童:[{ 名称:“PlayerEntryPage”, 路径:“条目”, 组成部分:路由控制, 道具:(路线)=>({ 子例程:GetRouteName(“PlayerEntryPage”), }), 儿童:[{ 名称:'PlayerName', 路径:“名称”, 组成部分:路由控制, 道具:(路线)=>({ 子例程:GetRouteName(“PlayerName”), }), 儿童:[{ 姓名:'玩家信息', 路径:'玩家信息', 组件:PlayerInfo, }, { 名称:'玩家统计', 路径:'玩家统计', 组成部分:球员统计, }, { 名称:'玩家记录', 路径:'玩家记录', 组件:PlayerRecords, }], }, { 名称:'Grounds', 路径:'地面', 组成部分:路由控制, 道具:(路线)=>({ 子例程:GetRouteName(“接地”), }), 儿童:[{ 名称:'Grounds info', 路径:“地面信息”, 组成部分:GroundsInfo, }, { 姓名:'比赛进行', 路径:“比赛进行中”, 组成部分:比赛, }, { 名称:'Grounds records', 路径:'grounds records', 组成部分:地面记录, }], }, { 名称:“匹配信息”, 路径:“信息”, 组成部分:路由控制, 道具:(路线)=>({ 子例程:GetRouteName(“匹配信息”), }), 儿童:[{ 名称:'匹配信息', 路径:“匹配信息”, 组件:MatchInfo, }, { 名称:“匹配历史记录”, 路径:“匹配历史记录”, 组成部分:匹配历史, }, { 名称:'社区资源', 路径:“社区资源”, 组成部分:社区资源, }], } ], }, ] } ] //自动获取路由器的子例程(按路由名称) 函数getChildr