vue.js - 如何从组件数据中传递 vue-router 中的多个参数
问题描述
我想创建“VendorDetail.vue”组件并从组件“Vendors.vue”中获取数据。在“Vendors.vue”中有一些列表对象,用户可以选择并将其显示在“vendorDetail.vue”上。所以在“VendorDetail.vue”中,传递 id props 并显示来自路由的对象。
我该如何解决?
在'routes.js'
import Home from './components/Home.vue'
import Login from './components/Login.vue'
import Join from './components/Join.vue'
import TentangKami from './components/TentangKami.vue'
import CaraPrint from './components/CaraPrint.vue'
import RegisterUser from './components/RegisterUser.vue'
import RegisterPartnership from './components/RegisterPartnership.vue'
import DashboardUser from './components/user/Dashboard.vue'
import Dashboard from './components/partnership/Dashboard.vue'
import Profil from './components/partnership/Profil.vue'
import Produk from './components/partnership/Produk.vue'
import Pesanan from './components/partnership/Pesanan.vue'
import Dicetak from './components/partnership/Dicetak.vue'
import VendorDetail from './components/user/VendorDetail.vue'
import Completed from './components/user/Completed.vue'
import Vendors from './components/user/Vendors.vue'
//const url = 'http://127.0.0.1:8000/api/board/'
const routes = [
{
path: '*',
redirect: '/login'
},
{
path: '/',
name: 'home',
component: Home
},
{
path: '/login',
name: 'login',
component: Login
},
{
path: '/register-user',
name: 'register-user',
component: RegisterUser
},
{
path: '/register-partnership',
name: 'register-partnership',
component: RegisterPartnership
},
{
path: '/join',
component: Join
},
{
path: '/tentang-kami',
component: TentangKami
},
{
path: '/cara-print',
component: CaraPrint
},
{
path: '/dashboard-partnership/:id',
component: Dashboard,
children: [
{
path: '',
component: Profil
},
{
path: 'profil',
component: Profil
},
{
path: 'produk',
component: Produk
},
{
path: 'pesanan',
component: Pesanan
},
{
path: 'dicetak',
component: Dicetak
},
]
},
{
path: '/dashboard-user/:id',
component: DashboardUser,
props: true,
children: [
{
path: '',
component: DashboardUser,
name: 'dashboard-user'
},
{
path: 'vendors',
component: Vendors,
name: 'vendors',
},
{
path: 'vendor-detail/:id',
component: VendorDetail,
name: 'vendor-detail',
props: true
},
{
path: 'completed',
name: 'completed',
component: Completed
}
]
},
];
export default routes;
在'src/components/user/Vendors.vue'
<template>
<div class="flex pa2 justify-between ph5">
<div class="fl w-50 w-25-m w-20-l pa2 " v-for="board in boards" :key="board.id">
<router-link to="'/dashboard-user/id/vendor-detail/' + board.id" class="db link dim tc grow dashboard--card">
<img src="../../assets/img/print1.png" alt="Profil Percetakan" class="w-100 db"/>
<dl class="mt2 f6 lh-copy ph3">
<dt class="clip">Title</dt>
<dd class="ml0 black truncate w-100 tl">{{board.name}}</dd>
<dt class="clip">Artist</dt>
<dd class="ml0 gray truncate w-100 tl">{{board.description}}</dd>
</dl>
</router-link>
</div>
</div>
</template>
<script>
/* eslint-disable */
import axios from 'axios'
import { mapState, Store } from 'vuex'
const url = 'http://127.0.0.1:8000/api/board/'
export default {
name: 'Vendors',
data() {
return {
user: 'Hilman Luthfi',
boards: [],
search: null
}
},
mounted() {
axios.get(url)
.then(response => {
this.boards = response.data
console.log(response.status)
console.log(response.data)
})
.catch((error) => {
console.log(error)
})
},
}
</script>
在'src/components/user/VendorDetail.vue'
<template>
<div>
<div class="mw9 center ph3-ns mt5-ns">
<div class="cf ph2-ns">
<div class="fl w-100 w-40-ns pa2 mh4 tl">
<img src="../../assets/img/print1.png" alt="Profil Percetakan" class="w-90"/>
<div>
<p class="f4 b ttu mv4">detail pemesanan</p>
<div class="pv2">
<label for="rangkap" class="f6 db lh-copy">Rangkap</label>
<input type="number" name="rangkap" id="rangkap" v-model="rangkap" />
</div>
<div class="pv2">
<label for="halaman" class="f6 db lh-copy">Halaman</label>
<input type="number" name="halaman" id="halaman" v-model="halaman" />
</div>
<div class="pv2">
<label for="jenis-kertas" class="f6 db lh-copy">Jenis Kertas</label>
<select name="jenis-kertas" id="jenis-kertas" v-model="jenisKertas">
<option value="a4">A4</option>
<option value="a3">A3</option>
<option value="a2">A2</option>
</select>
</div>
<div class="pv2">
<label for="jenis-print" class="f6 db lh-copy">Jenis Print</label>
<select name="jenis-print" id="jenis-print" v-model="jenisPrint">
<option value="hitam-putih">Hitam Putih</option>
<option value="berwarna">Berwarna</option>
</select>
</div>
<div class="pv2">
<label for="finishing" class="f6 db lh-copy">Finishing</label>
<select name="finishing" id="finishing" v-model="finishing">
<option value="jilid">Jilid</option>
<option value="hard-cover">Hard Cover</option>
</select>
</div>
<div class="pv2">
<label for="warna-cover" class="f6 db lh-copy">Warna Cover</label>
<select name="warna-cover" id="warna-cover" v-model="warnaCover">
<option value="putih">Putih</option>
<option value="biru">Biru</option>
<option value="kuning">Kuning</option>
<option value="merah">Merah</option>
<option value=hijau>Hijau</option>
</select>
</div>
</div>
</div>
<div class="fl w-100 w-50-ns ph2">
<h4 class="f2 tl">{{ board.name }}</h4>
<p class="lh-copy tl">{{ board.description }}</p>
<p class="b f4 mv3 pt3 tl">Upload dokumenmu disini</p>
<div>
<div id="file-box">
<input id="input-file" placeholder="Lepaskan Filemu disini" class="db mv3" type="file" name="file" />
<p id="label-file">Lepaskan Filemu disini</p>
</div>
</div>
<textarea id="input-message" name="message" class="db mv4" type="text" placeholder="Tambahkan Pesan" v-model="pesan"/>
<p class="f4 b ttu tl">total harga</p>
<p class="f4 b tl">Rp {{ total }}</p>
<hr>
<input type="button" @click="orderNow" value="Cetak Sekarang" class="f6 grow no-underline br-pill ph4 pv3 mv2 b white" />
</div>
</div>
</div>
</div>
</template>
<script>
import Axios from 'axios'
const url = 'http://127.0.0.1:8000/api/board/'
export default {
name: 'VendorDetail',
props: ['id'],
data() {
return {
user: 'Hilman Luthfi',
total: '15.000,00',
rangkap: '',
halaman: '',
pesan: '',
jenisKertas: '',
jenisPrint: '',
finishing: '',
warnaCover: '',
board: {}
}
},
created() {
Axios.get(url + this.$route.params.id + '/')
.then(response => {
this.board = response.data
console.log(response.status)
console.log(response.data)
})
.catch(error => {
console.log(error)
})
},
methods: {
orderNow: () => {
this.$router.push({name: 'completed'})
}
}
}
</script>
解决方案
更新 :
你可以像这样传递一个道具router-link
:
<router-link :to="{ name: 'vendor-detail', params: { id: board.id }}"></router-link>
推荐阅读
- java - RequestParam = false 不返回所有内容
- spring - 为什么 Spring boot AspectJ 有时只错过触发
- flutter - 即使在颤振中重新启动应用程序后如何保持相同状态
- c# - 为什么功能区项目没有显示在窗口上?
- sql - SQL 连接日期和日期 - 如果未找到匹配项,则返回最新的
- selenium-webdriver - 如何阻止弹出窗口出现在 Jmeter WebDriver Sampler 上
- java - 需要对人们在测试中使用的不同用例进行一些解释
- json - 使用 Python 脚本更新 TFS Web
- python - 如何处理内联评论?
- javascript - 如何将 Android 支持添加到 TensorFlow 和 React Native