我有两篇文章a和b,它们的链接分别是/post/a
和post/b
.
但由于都属于文章,使用的是同一个组件,只是组件里的内容根据url的不同而不同。router是这样的:
'/post/:post_id': {
component: require('./components/post')
}
现在我在文章b里放置一个链接,点击链接访问文章a,这时会看到浏览器地址变了,但是页面并没有反应,必须再刷新一下页面(代码刷新也可)才能变成文章a。并且,在文章b和文章a之间的所有前进后退操作都无效,也是浏览器地址变了但是页面没变。
我自己感觉是,因为是相同组件,实际上并没有触发vue-router. 每篇文章都是解析markdown然后传入./components/post
这个组件来显示的,如果每篇文章都单独写一个组件,应该能解决问题,但是这么做得话,我就得维护markdown, vue component, router map 三个位置的文章列表,这会导致增删文章变得相当麻烦。想问下各位在我目前的结构下,有没有办法能够正常在两篇文章间切换?
--------------更新-----------------
抱歉,应该附加一下./components/post
的内容的,组件结构为:
<template lang="jade">
div#markdown {{{ post }}}
</template>
<script>
import hljs from 'highlight.js'
import jq from 'jquery'
export default {
data () {
return {
post: require('../components/articles/' + this.$route.params.post_id + '.md')
}
},
ready () { ... }
}
</script>
载入时根据router.params.post_id
的值,改变post
的值。
我认为你是不是把数据的读取和解析代码放错位置了。
vue的created、data
vue-router的data、activated
这4个hook具体不知道哪一个比较合适,你都console.log看看吧。
附文档
http://router.vuejs.org/en/pipeline/hooks.html
-------------------------方便大家查看,评论如下