Как получить доступ к свойству начального экземпляра приложения в шаблоне компонента.vue?
Я установил новое приложение Vue с помощью Vue-Cli. У меня есть Vue-Loader и и Vue-маршрут также работает в этом проекте.
Как получить доступ к собственности events
в следующем случае?
В настоящее время приведенный ниже код приводит к следующей ошибке: Property or method "events" is not defined on the instance but referenced during render
main.js
import Vue from 'vue'
import App from './App.vue'
import router from './router'
Vue.config.productionTip = false
new Vue({
router,
store,
render: function(y) {
return y(App)
},
// Data
data: {
events: [
{
name : 'this',
price : 2000
},
{
name : 'that',
price : 3000
},
{
name : 'the-other',
price : 4000
},
]
}
}).$mount('#app')
./App.vue
<template>
<div id="app">
<div id="nav">
<router-link to="/">Home</router-link> |
<router-link to="/about">About</router-link>
</div>
<ul>
<li v-for="event in events">
<h2>{{ event.name }}</h2>
<p>{{ event.price }}</p>
</li>
</ul>
<router-view/>
</div>
</template>
3 ответа
Ваш events
данные существуют только в main.js
но вы используете это в App.vue
который не имеет к нему доступа.
Чтобы сделать events
данные, которые вы можете передать events
как props
на ваш App
составная часть.
render: function(y) {
return y(App, {
props: {
events: this.events
}
});
}
И в твоем App.vue
<template>
<div id="app">
<div id="nav">
<router-link to="/">Home</router-link> |
<router-link to="/about">About</router-link>
</div>
<ul>
<li v-for="event in events">
<h2>{{ event.name }}</h2>
<p>{{ event.price }}</p>
</li>
</ul>
<router-view/>
</div>
</template>
<script>
export default {
name: 'App',
props: ['events']
}
</script>
Как насчет этого.$root.events или создайте вычисляемое свойство в компоненте приложения и назначьте там корневые события.
Вы можете передать его как реквизит и использовать свойство шаблона template:"<App :events='events'/>",
сделать компонент приложения следующим образом:
new Vue({
router,
store,
template:"<App :events='events'/>",
// Data
data: {
events: [
{
name : 'this',
price : 2000
},
{
name : 'that',
price : 3000
},
{
name : 'the-other',
price : 4000
},
]
}
}).$mount('#app')
в App.vue:
<template>
....
</template>
<script>
export default {
props: ['events']
}
</script>