是否有人能够将道具传递给Nuxt.js中的页面?
典型的Vue.js道具可以这样传递:
// parent-component.vue
<child-component :basket-count="items.length"/>
<script>
import ChildComponent from './child-component'
export default {
data () {
items: [{}, {}]
},
components: {
childComponent: ChildComponent
}
}
</script>
// child-component.vue
<p>You have {{ basketCount }} items in your basket</p>
<script>
export default {
props: [
'basket-count'
]
}
</script>
但是在布局<nuxt />
中使用default.vue
标记时,道具不会按原样传递到子页面。
讨论已经发生here,但票证似乎没有结论。我还不能解决实现这一目标的工作方法。
会回复,但很想知道Nuxt.js devs对此的想法吗?
答案 0 :(得分:3)
你必须在JavaScript部分使用camelCase
<script>
export default {
props: [
'basketCount'
]
}
</script>
要在页面组件之间传递数据,另一种方法是使用Vuex商店https://nuxtjs.org/guide/vuex-store/
答案 1 :(得分:3)
将自定义Vue组件与slots一起使用。
这是我的Default.vue
组件的示例:
<template>
<!--
Note: This is not a typical Nuxt template
It is just a custom vue component with a slot (https://vuejs.org/v2/guide/components-slots.html)
I prefer components with slots over Nuxt's layouts becaise custom components are more versatile"
- they support passing of props
- they can be chained (you can make nested layouts)
-->
<div>
<!-- custom navbar component which will appear on every page -->
<Navbar />
<main>
<!-- not all pages have a back button -->
<BackButton v-if="backLink" :backLink="backLink" />
<!-- page does not have to have a title -->
<h1 v-if="title">{{ title }}</h1>
<!-- not all pages have date displays (only posts do) -->
<div v-if="date" class="date">
Date added:
<b>{{ dateDisplay }}</b>
</div>
<!-- All the content is filled here -->
<slot></slot>
</main>
</div>
</template>
<script>
export default {
props: {
title: {
type: String,
required: false,
},
backLink: {
type: String,
required: false,
},
date: {
type: String,
required: false,
}
}
}
</script>
然后在index.vue
(或任何其他页面)中,我可以这样使用它:
<template>
<Default title="Index page">
This is my website's index page. I can put any HTML over here.
</Default>
</template>
您要做的就是将Default.vue
作为vue组件导入。
有点题外话,但您可以使用nuxt/components。这样,您不必在每个页面上导入和注册Vue组件。
此方法的优点:
Root
父级布局和一个BlogPost
子级布局,其中BlogPost
是Root
的“继承”。答案 2 :(得分:0)
您必须在child-component.vue
中使用它:
<script>
export default {
props: {
basketCount: {
type: Number,
default: 0
}
}
</script>
答案 3 :(得分:0)
我也有同样的问题。 根据下面的线程,不可能将道具传递给元素: