在axios post请求中将$route作为参数传递



所以我有一个vue项目,它有一个包含许多测试的面板,当用户点击按钮并在另一个页面上重定向时,我想在axios请求中传递测试名称作为参数。

我已经完成了第一部分,并将路由中的测试名称作为参数名称传递,现在我正在尝试获取集合中的相应项。当使用$route.params.name时,我得到一个错误,说$route没有定义这是我到目前为止的代码

<template>
<v-app>

<app-navbar />
<v-main>
<div class="text-center">
<h3>
test {{ $route.params.name }}, {{ $route.query.status }},{{
$route.query.tag
}}
</h3>
<h3 v-if="this.loadAPI">{{failreason()}}</h3>
</div>

<v-data-table
:headers="headers"
:items="imagesref"
:items-per-page="5"
class="elevation-1"
>
<template v-slot:[`item.index`]="{ index }">

{{index+1}}
</template>
<template v-slot:[`item.status`]="{ index }">
{{imagesresult[index][2]}}


</template>

<template v-slot:[`item.ref`]="{ index }">

<v-img :src="imagesref[index]" max-width="750" max-height="750"   @click="expref[index] = !expref[index]"/>
<v-overlay :value="expref[index]"><v-img :src="imagesref[index]" max-width="1300" max-height="900" @click="expref[index] = !expref[index]"/> </v-overlay>


</template>
<template v-slot:[`item.test`]="{ index }">

<v-img :src="imagestest[index]" max-width="750" max-height="750" @click="exptest[index] = !exptest[index]"/>
<v-overlay :value="exptest[index]"><v-img :src="imagestest[index]" max-width="1300" max-height="900" @click="exptest[index] = !exptest[index]"/> </v-overlay>
</template>
<template v-slot:[`item.res`]="{ index }">

<v-img :src="imagesresult[index][0]" max-width="750" max-height="750" @click="expres[index] = !expres[index]"/>
<v-overlay :value="expres[index]"><v-img :src="imagesresult[index][0]" max-width="1300" max-height="900" @click="expres[index] = !expres[index]"/> </v-overlay>
</template>
<template #[`item.mis`]="{ index }">
{{Math.round(imagesresult[index][1]*100)/100}}

</template>
<template #[`item.Scrubber`]="{ index }">
<nuxt-link :to="{ path: 'scrubber', query: { imageref: imagesref[index],imagetest:imagestest[index],imageres:imagesresult[index] }}">Show Scrubber</nuxt-link>
</template>
</v-data-table>

</v-main>

</v-app>
</template>
<script>
import appNavbar from "../../../components/appNavbar.vue"
import axios from "axios"
export default {
components: { appNavbar },
name: "App",
data() {
return {
loadAPI:false,
dialog:false,
expref:[],
exptest:[],
expres:[],
items: [],
imagesref: [],
imagestest: [],
imagesresult: [],

headers: [
{ text: 'index',value: 'index',sortable:false},
{ text: 'Status',value: 'status',sortable:false},
{ text: 'Imagesref', value: 'ref',sortable:false },
{ text: 'Imagestest', value: 'test',sortable:false },
{ text: 'Imagesresult', value: 'res',sortable:false },
{ text: 'Mismatch percent', value: 'mis',sortable:false },
{ text: 'Scrubber', value: 'Scrubber',sortable:false },
]
}
},
async created() {
try {
const res = await axios({
method: 'post',
url: 'http://localhost:3002/backend/gettestbyname',
data: {name: $route.params.name}
})
this.items = res.data.data;
this.imagesref = res.data.data[0].refimages;
this.imagestest = res.data.data[0].testimages;
this.imagesresult = res.data.data[0].testresults;
for (let i of this.imagesref){
this.expref.push(false);
this.exptest.push(false);
this.expres.push(false);
}
this.loadAPI=true;
} catch (error) {
console.log(error);
}
},
methods:{
failreason()
{

if (this.items[0].status=="failed"){
let index=0;
for (let i of this.items[0].testresults)
{ console.log(i);
index++;
if (i[2]=="failed")
{
return 'Visual test failed at step number '+index;      
}
}
return 'Test set missing screenshots';
}
}
} 
}
</script>
<style  scoped>
</style>
Vue中的全局注入属性可从Vue上下文中获得,而不是全局javascript上下文(如window(。

因此,在<script>标签中,您必须使用this.$router来访问它

在您的created挂钩中:

// replace
data: {name: $route.params.name}
//by
data: {name: this.$route.params.name}

来自vue-router文档:

通过调用app.use(路由器(,我们可以在任何组件内以this.$router的形式访问它,并以this.$route的形式访问当前路由:

最新更新