Я создаю веб-приложение с VueJs. У меня есть три страницы, приложения, реестры, удостоверения. На странице приложений есть таблица с приложениями с ссылкой1 (localhost: 8080 / apps / {appid} / regs) для просмотра реестра в каждой строке. Точно так же на странице реестра есть ссылка2 (localhost: 8080 / apps / {appid} / regs / {regid} / ids) для просмотра приложения.
Моя проблема в том, что когда я нажимаю link1, я попадаю на страницу реестров, но когда я нажимаю link2, я попадаю на localhost: 8080 em > вместо localhost: 8080 / apps / {appid} / regs / {regid} / ids. Но когда я копирую адрес из ссылки2 и вставляю его в адресную строку, я попадаю на нужную страницу. Что я делаю неправильно?
Также я получаю следующее предупреждение в консоли -
[Vue warn] отсутствует параметр для именованного маршрута "regs": ожидается определение "appid"
[Vue warn] отсутствует параметр для именованного маршрута "ids": ожидается, что "appid" будет определен
router.js
{
path: "apps",
name: "apps",
component: () => import("./components/protected/Apps"),
},
{
path: "apps/:appid/regs",
name: "regs",
props: true,
component: () => import("./components/protected/Regs"),
},
{
path: "apps/:appid/regs/:regid/ids",
name: "ids",
props: true,
component: () => import("./components/protected/Ids"),
},
Apps.vue
<template>
<table class="table table-striped mg-b-0">
<thead>
<tr>
<th class="tx-left w-5">#</th>
<th class="tx-left">Application</th>
<th class="tx-left text-center w-5">Action</th>
</tr>
</thead>
<tbody>
<tr v-bind:key="index" v-for="(app, index) in apps">
<td class="masked">{{index+1}}</td>
<td>{{app.name}}</td>
<td class="text-center">
<router-link class="bg-white" :to="{ name: 'regs', params: { appid: app.id}}">
<i class="fa fa-border fa-eye" title="View Registries"/>
</router-link>
</td>
</tr>
</tbody>
</table>
</template>
Regs.vue
<template>
<template v-if="appid">
<table class="table table-striped mg-b-0">
<thead>
<tr>
<th class="tx-left w-5">#</th>
<th class="tx-left">Registry</th>
<th class="tx-left text-center w-5">Action</th>
</tr>
</thead>
<tbody>
<tr v-bind:key="index" v-for="(reg, index) in regs">
<td class="masked">{{index+1}}</td>
<td>{{reg.name}}</td>
<td class="text-center">
<router-link class="bg-white" :to="{ name: 'ids', params: { appid: appid, regid: reg.id}}">
<i class="fa fa-border fa-eye" title="View Identities"/>
</router-link>
</td>
</tr>
</tbody>
</table>
</template>
</template>
<script>
export default {
name: "Regs",
props: ['appid'],
....
}
Ids.vue
<template>
<template v-if="appid && regid">
<table class="table table-striped mg-b-0">
<thead>
<tr>
<th class="tx-left w-5">#</th>
<th class="tx-left">Identity</th>
</tr>
</thead>
<tbody>
<tr v-bind:key="index" v-for="(id, index) in ids">
<td class="masked">{{index+1}}</td>
<td>{{id.name}}</td>
</tr>
</tbody>
</table>
</template>
</template>
<script>
export default {
name: "Ids",
props: ['appid','regid'],
....
}
</script>
appid
(которая назначается через свойство) на самом деле не имеет значения. Вместо этого должно быть$router.params.appid
- person Ohgodwhy   schedule 04.02.2020:to="{ name: 'ids', params: { appid: appid, regid: reg.id}}"
. Гдеappid
в этом случае будет ссылаться на вашprop
. Однакоprops
не увлажняются маршрутизатором, поэтому фактически должно быть::to="{ name: 'ids', params: { appid: $router.params.appid, regid: reg.id}}"
- person Ohgodwhy   schedule 04.02.2020Regs.vue
file. Есть ли свойствоid
в данныхregs
. - person Tingsen Cheng   schedule 04.02.2020v-if
, чтобы контролировать видимость ссылки, чтобы избежать грязных данных. Как следующие<router-link v-if="reg.id" class="bg-white" :to="{ name: 'ids', params: { appid: appid, regid: reg.id}}">
- person Tingsen Cheng   schedule 04.02.2020