【发布时间】:2022-01-13 19:10:26
【问题描述】:
我正在尝试使用axios 在Vue3 应用程序中包含一个动态路由组件以连接到Django API,但我却遇到了以下错误。我正在使用Vite.dev。我按照文档使用 create 方法,但在文档和示例中有点迷失。
第一个错误:
src/views/Page.vue:27:11 - error TS2339: Property 'page' does not exist on type '{ getPage(pageSlug: any): Promise<void>; }'.
27 this.page = response.data
~~~
src/views/Page.vue:35:14 - error TS2339: Property 'getPage' does not exist on type '{ name: string; components: { PageComponent: { props: string[]; }; }; data(): { page: {}; }; methods: { getPage(pageSlug: any): Promise<void>; }; created(): Promise<void>; }'.
35 await this.getPage(pageSlug)
~~~~~~~
src/views/Page.vue:36:8 - error TS2339: Property '$watch' does not exist on type '{ name: string; components: { PageComponent: { props: string[]; }; }; data(): { page: {}; }; methods: { getPage(pageSlug: any): Promise<void>; }; created(): Promise<void>; }'.
36 this.$watch (() => this.route.params, this.getPage())
~~~~~
src/views/Page.vue:36:27 - error TS2339: Property 'route' does not exist on type '{ name: string; components: { PageComponent: { props: string[]; }; }; data(): { page: {}; }; methods: { getPage(pageSlug: any): Promise<void>; }; created(): Promise<void>; }'.
36 this.$watch (() => this.route.params, this.getPage())
~~~~~
src/views/Page.vue:36:46 - error TS2339: Property 'getPage' does not exist on type '{ name: string; components: { PageComponent: { props: string[]; }; }; data(): { page: {}; }; methods: { getPage(pageSlug: any): Promise<void>; }; created(): Promise<void>; }'.
36 this.$watch (() => this.route.params, this.getPage()) ~~~~~~~
Found 5 errors.
我已经编辑了我的Page.vue 脚本,如下所示,但不能帮助我在生产环境中构建
<template>
...
<PageComponent :page="page" />
....
</template>
<script lang=ts>
export default {
name: 'Page',
components: {
PageComponent
},
data() {
return {
page: {}
}
},
methods: {
async getPage(pageSlug:any) {
let page = {}
await axios
.get(`/api/v1/pages/${pageSlug}/`)
.then(response => {
console.log(response.data)
this.page = response.data
})
},
},
async created() {
const route = useRoute()
const pageSlug = route.params.slug
await this.getPage(pageSlug)
this.$watch (() => this.route.params, this.getPage())
}
};
</script>
还有我的pageComponent.vue:
<template>
<h1 class="title is-1">{{ page.title }}</h1>
<div class="container has-size-6">
<div class="columns is-centered is-vcentered is-mobile">
<div class="column is-narrow has-text-centered is-6 has-text-left has-text-weight-medium" v-html="page.content">
</div>
</div>
</div>
</template>
<script lang="ts">
export default {
props: ['page']
}
</script>
还有我的tsconfig
{
"compilerOptions": {
"target": "esnext",
"useDefineForClassFields": true,
"module": "esnext",
"moduleResolution": "node",
"strict": true,
"jsx": "preserve",
"sourceMap": true,
"resolveJsonModule": true,
"esModuleInterop": true,
"lib": ["esnext", "dom"]
},
"include": ["src/**/*.ts", "src/**/*.d.ts", "src/**/*.tsx", "src/**/*.vue"]
}
还有我的viteconfig:
const { resolve } = require('path');
// https://vitejs.dev/config/
export default defineConfig({
plugins: [vue()],
base: '/static/',
resolve: {
extensions: ['.mjs', '.js', '.ts', '.jsx', '.tsx', '.json', '.vue'],
},
build: {
outDir: resolve('./dist'),
assetsDir: '',
manifest: true,
emptyOutDir: true,
target: 'es2015',
rollupOptions: {
input: {
main: resolve('./src/main.ts'),
},
output: {
chunkFileNames: undefined,
},
},
}
})
如何修复错误? 谢谢
ps 这是我必须根据@tony19 的答案来解决的问题:
<script lang="ts">
import { defineComponent } from 'vue'
import PageComponent from './../components/PageComponent.vue'
import axios from 'redaxios'
import { useRoute } from 'vue-router'
export default defineComponent({
name: 'Page',
components: {
PageComponent
},
data() {
return {
page: Object
}
},
methods: {
async getPage() {
const route = useRoute()
const pageSlug = route.params.slug
await axios
.get(`/api/v1/pages/${pageSlug}/`)
.then(response => {
this.page= response.data
})
},
},
async created() {
const route = useRoute()
await this.getPage()
this.$watch (() => route.params, () => this.getPage())
}
});
</script>
【问题讨论】: