我的 404/index.vue 有一个奇怪的问题,它在$ nuxt generate
生成我的404.html
文件之后。我在我的 vue 文件中使用了一个 Btn 组件,它适用于index.vue
文件,但不适用于我的404/index.vue
. 似乎它没有将 onclick 参数传递给组件。
我认为以下内容更容易理解:404/index.vue
<script>
import { mapGetters } from 'vuex'
import Heading from '~/components/Heading/Heading.vue'
import Btn from '~/components/Btn/Btn.vue'
export default {
components: {
Heading,
Btn
},
computed: {
...mapGetters(['defaultLang', 'currentLang']),
...mapGetters('data', ['getPageBySlug']),
page () {
return this.getPageBySlug('404')
}
},
data: () => ({
externalRoute: false
}),
beforeRouteEnter (to, from, next) {
// check before route entering if we came from external or already from our app
next(vm => {
if (from.path === '/') {
vm.externalRoute = true
} else {
vm.externalRoute = false
}
})
},
methods: {
getBackPath () {
return `/${this.currentLang !== this.defaultLang ? this.currentLang : ''}`
},
goBack () {
// if we came externally we go to our root, else we go one route back in history
if (this.externalRoute) {
this.$router.push('/')
} else {
this.$router.go(-1)
}
}
}
}
</script>
<template>
<div class="Page">
<Heading :level="1">{{ page.title }}</Heading>
<Btn :click="goBack">{{ $t('error.link') }}</Btn>
</div>
</template>
如您所见,goBack 函数应传递给 Btn 组件。生成静态页面后,按钮就在那里(带有正确的语言 error.link),但点击时它不会做任何事情。
我的按钮组件如下所示:(我对其进行了一些简化以减少此处的重要内容:
<script>
export default {
name: 'Btn',
props: {
click: {
type: Function,
default: () => {},
required: false
}
}
}
</script>
<style src='./Btn.scss' lang='scss'></style>
<template>
<component
class="Btn"
v-on:click="click"
<slot />
</component>
</template>
我在我的 index.vue 中使用了相同的按钮组件,它呈现在起始页面上。Btn 在那里工作得很好(也在 $ yarn generate 之后,我不知道会有什么区别。不知何故,Btn 没有收到 404 模板上的 onclick 功能。
如果我将 /404 添加到路由器并在本地运行应用程序,则 Btn 可以工作。当我生成 Btn 不再适用于 404 vue 模板的静态页面时,这真的只是孤立的。
知道这可能是什么原因吗?