#javascript #vue.js #vue-router
#javascript #vue.js #vue-маршрутизатор
Вопрос:
Я новичок в vue js. И моя задача — взять данные из api, сделать разбивку на страницы и при нажатии на любой пост, чтобы открывалась новая страница с более подробной информацией о посте. Я сделал разбивку на страницы, но я не могу выполнить переход. При нажатии на сообщение ссылка меняется, но переход не выполняется.
Мой основной код:
<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. Это в основном отображает маршрутизируемый компонент внутри тегов.
Комментарии:
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. Ваша разбивка на страницы будет компонентом списка и также должна быть добавлена к вашему маршрутизатору. Вы можете заглянуть внутрь примера..