Не переходите на новую страницу Vue-router

#javascript #vue.js #vue-router

#javascript #vue.js #vue-маршрутизатор

Вопрос:

Я новичок в vue js. И моя задача — взять данные из api, сделать разбивку на страницы и при нажатии на любой пост, чтобы открывалась новая страница с более подробной информацией о посте. Я сделал разбивку на страницы, но я не могу выполнить переход. При нажатии на сообщение ссылка меняется, но переход не выполняется.

Проект на GitHub

Мой основной код:

 <template>
  <div id="app">
      <ul>
        <li v-for="(post, index) of paginatedData" class="post">
          <router-link :to="{ name: 'detail', params: {id: index} }">
          <img src="src/assets/nature.jpg">
          <p class="boldText"> {{ post.title }}</p>
          </router-link>
          <p> {{ post.body }}</p>
        </li>
      </ul>



  </div>
</template>

<script>
import axios from 'axios';
export default {
  el: "#app",
  data () {
    return {
      current: null,
      page: 0,
      posts: [],
      }
    },
    created(){
      this.getData()
    },
    methods: {
    setCurrent: function(id) {
      this.current = id;
    },
    getData() {
      axios.get(`https://jsonplaceholder.typicode.com/posts`).then(response => {
        this.posts = response.data
      })
    },
  }
  }
</script>
  

Моя страница с подробным сообщением:

 <template>
  <div class="post" v-if="detail">
    <img src="src/assets/nature.jpg">
    <h2>{{ post.title }}</h2>
    <p>{{ post.body }}</p>
  </div>
</template>

<script>
  module.exports = {
    data: function() {
      return {
        posts: [],
      }
    },
    created: function() {
      var postId = this.$route.params.id
      this.post = this.posts[postId]
    }
  }
</script>
  

Мой main.js:

 import Vue from 'vue'
import App from './App.vue'
import VueRouter from 'vue-router'

var Detail = require('./Detail.vue')

Vue.use(VueRouter)

var router = new VueRouter({
  routes: [
    {path: 'detail/:id', name: 'detail', component: Detail }
  ]
})

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

Комментарии:

1. вы пробовали :to="'detail/' id" ?

2. Вот что написано в ссылке localhost:8080/#/detail/подробно/детализация/неопределенный

Ответ №1:

Вам нужен тег router-view. Это в основном отображает маршрутизируемый компонент внутри тегов.

https://router.vuejs.org/guide/#html

Комментарии:

1. <li v-for=»(post, index) paginatedData» class=»post»> <router-link :to=»{ name: ‘detail’, params: {id: index} }»> <img src=»src/assets/nature.jpg «> <p class=»boldText»> {{ post.title }}</p> </router-link> <p> {{ post.body }}</p> <просмотрмаршрутизатора></router-view>

2. Я добавил <router-view></router-view> в <li></li> но это не сработало

3. вид маршрутизатора должен быть где-то в корневом элементе, например, в App.vue. Ваша разбивка на страницы будет компонентом списка и также должна быть добавлена к вашему маршрутизатору. Вы можете заглянуть внутрь примера..