«Ошибка типа: невозможно прочитать свойство 'pu sh' из неопределенного" при попытке использовать маршрутизатор в VueJS - PullRequest
1 голос
/ 03 февраля 2020

Я посмотрел на каждый подобный вопрос, но, похоже, ни один ответ не решил мою проблему.

Я получаю эту ошибку при попытке использовать router.pu sh в компоненте VueJS, в то время как мой маршрутизатор смонтирован, и поэтому должен быть доступен через этот. $ router.

Я использую vue -cli.

Как я могу исправить эту ошибку?

Здесь мой код:

main. js:

import Vue from 'vue'
import App from './App.vue'
import router from './router';

Vue.config.productionTip = false

new Vue({
  router,
  render: h => h(App),
}).$mount('#app')

Код маршрутизатора:

import Vue from 'vue';
import VueRouter from 'vue-router';

//Pages
import Home from '@/pages/home/Index.vue';
import Contact from '@/pages/contact/Index.vue';
import Article from '@/pages/article/Index.vue';

Vue.use(VueRouter);

//Route list
const routes = [
  {
    path: '/',
    name: 'home',
    component: Home,
  },
  {
    path: '/contact',
    name: 'contact',
    component: Contact,
  },
  {
    path: '/article/:id',
    name: 'article',
    component: Article,
  }
];

const router = new VueRouter({
  routes,
  mode: 'history'
});

export default router;

Приложение. vue:

<template>
  <div id="app">
      <Home/>
  </div>

</template>

<script>
import Home from "@/pages/home/Index.vue"

export default {
  name: 'app',
  components: {
    Home
  }
}
</script>

<style>
html, body, #app {
  width: 100%;
  height: 100%;
}

body {
  margin: 0;
}

#app {
  font-family: 'Avenir', Helvetica, Arial, sans-serif;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  color: #2c3e50;
}

#app a {
  color: #E7E6E6;
  text-decoration: none;
}

#app a:hover {
  color: rgb(160, 160, 160);
}
</style>

Миниатюра. vue, компонент, в котором я пытаюсь вызвать маршрутизатор:

<template>
  <a href="" @click="redirectToArticle">
    <div class="thumbnail">
      <img class="image" :src="require(`../../../assets/${imgName}`)"/>
      <div class ="overlay">
        <div class = "container-titre">
          <p v-html="title"></p>
        </div>
      </div>
    </div>
  </a>
</template>

<script>
export default {
  name: "Thumbnail",
  props:
  {
    imgName: String,
    title: String,
    articleId: String
  },
  methods:
  {
    redirectToArticle(e)
    {
      //This is the line that generates the error
      this.$router.push({name: "article", params:{ id: this.$props.articleId } });
      e.preventDefault();
    }
  }
};
</script>

<style scoped>
    .thumbnail {
      position:relative;
      width: 250px;
      height: 250px;
      margin:75px;
    }

    .thumbnail:hover .overlay
    {
      opacity: 0.8;
    }

    .overlay
    {
      position: absolute;
      width: 100%;
      height: 100%;
      opacity: 0;
      transition: .5s ease;
      background-color: lightgray;
      left:0;
      top:0;
      font-family:Impact, Haettenschweiler, 'Arial Narrow Bold', sans-serif;
      text-align: center;
    }

    .container-titre
    {
      position:relative;
      width: 100%;
      background-color:darkslateblue;
      height: 30px;
      top: 197px;
      font-size: 24px;
      color:#E7E6E6;

    }

    .image
    {
      width: 250px;
      height: 250px;
    }

</style>

1 Ответ

0 голосов
/ 03 февраля 2020

Кажется, проблема возникла из-за моей установки vue -cli. Я сделал новый проект, вставил в него тот же код, и он работал, хотя в моем первоначальном проекте были все узлы-модули, включая vue -router.

Убедитесь, что вы проверили, если у вас такой же Вид проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...