一个文章如果没有目录怎么行。实现一级目录的功能并不算很难, 但是要包含二级目录的话就需要写长一点代码了。最终效果就像这样
由于项目是一个单页面应用, 在进行路由push后滚动条不会刷新,也就是说当前页面和上一个页面的滚动条的相对位置一样。
就像这样
点击阅读全文过后, 进入某个文章的详情页面,按道理来讲是应该从头开始阅读的。 然而滚动条却已经滚动了一部分距离了
当然上面的图只是模拟, 并不是真正的单页面应用。不过单页面应用确实存在这个问题,这个问题产生的原因可能是 document 还是原来的 document,单页面跳转路由其实向这个 document 中添加和删除节点而已,导致浏览器认为你仍然在浏览同一个页面。使用移动端访问https://blog.linyqiang.com时就可以看到“两个页面的” document.documentElement.scrollTop / document.documentElement.scrollHeight 是一样的(因为移动版版面没有采用自定义滚动)
鉴于上述情况,可以让页面中的某一个部分实现滚动(overflow:scroll)。不过这样滚动条只能紧贴在某个滚动元素的右边,影响美观,因此自己实现一个滚动条来模拟滚动
首先从服务器请求articles数据,并使用vuex管理
article-list.vue组件中引入articles的Getter,然后使用v-for 将 articles 渲染一遍就行
|
|
|
|
接下来就是书写 article 的样式了。不过需要注意的一点是如果 style 使用了 scoped ,那么v-html中的被渲染的那一部分是不能被scoped中的css选择符匹配的。
也就是说不能这样写
|
|
而是应该这样写
|
|
其实文章详情组件article.vue书写方式和article-list.vue也差不多, 只不过 article-content 的v-html内容从abstract(文章概括)变成了content(正文)
|
|
后台搭建代码忽略不计, 核心就是将markdown文本解析成HTML,然后保存进mongodb就行
使用Vue-cli构建项目,然后在src目录建立相应文件夹
目录结构大概如下
这个项目构建方式和vue-cli的默认构建方式有差别,原因是我要写两套界面(一套桌面端和一套移动端),而两套界面有一些公共的代码。
使用vue-cli构建多页面参考http://www.jianshu.com/p/0a30aca71b16