Как получить доступ к свойству начального экземпляра приложения в шаблоне компонента .vue? - PullRequest
0 голосов
/ 27 января 2019

Я установил новое приложение Vue с помощью Vue-Cli.У меня есть vue-loader и и vue-route, также работающие в этом проекте.

Как получить доступ к свойству 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 ]

0 голосов
/ 27 января 2019

Ваши 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>
0 голосов
/ 27 января 2019

Вы можете передать его как реквизит и использовать свойство шаблона 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>
0 голосов
/ 27 января 2019

как насчет этого. $ Root.events или создайте вычисляемое свойство в компоненте приложения и назначьте там корневые события.

...