前言
项目灵感的最初来源是@shinygang来自的Vue-cnodejs, 感谢cnodejs社区提供的API。 github:https://github.com/lzxb/vue-cnode
感悟
在vue-cnode升级vue2的时候,在公司内部已经有两个正式项目使用vue2,
遇到的一个最难的问题,就是如何能在页面后退时还原数据和滚动条位置,
虽然vue2内置了keep-alive组件,vue-router也提供了scrollBehavior方法进行设置,
但是仍然无法满足需求,后来阅读vue-router的源码发现,
每个页面都会自动在history.state对象中存储一个对应的key值,
便利用这个特性实现了页面后退时,数据和滚动条还原,
不过目前只是实现了页面的顶级组件还原,
如果需要对顶级组件下的子组件实现数据还原,
可以利用$options._scopeId来实现。
哈哈,具体如何实现就要靠大家自己发挥想象力了
技术栈
基于vue2 + vue-router + vuex + ES6 + less + flex.css重写vue版cnode社区,使用webpack打包
使用项目
1.克隆项目: git clone https://github.com/lzxb/vue-cnode.git
2.安装nodejs
3.安装依赖: npm install
4.启动服务: npm run dev
5.发布代码: npm run dist
功能
- [x] 首页列表,上拉加载
- [x] 主题详情,回复,点赞
- [x] 消息列表
- [x] 消息提醒
- [x] 个人主页
- [x] 用户信息
- [x] 登录
- [x] 退出
- [x] 关于
- [x] 页面后退,数据还原
- [x] 页面后台,滚动位置还原
- [x] ajax请求拦截器
- [x] 页面跳转,不再执行此页面的ajax请求回调方法
- [x] 启动图
项目目录说明
.
|-- config // 项目开发环境配置
| |-- index.js // 项目打包部署配置
|-- src // 源码目录
| |-- components // 公共组件
| |-- content.vue // 页面内容公共组件
| |-- data-null.vue // 数据为空时公共组件
| |-- footer.vue // 底部导航栏公共组件
| |-- header.vue // 页面头部公共组件
| |-- index.js // 加载各种公共组件
| |-- loading.vue // 页面数据加载公共组件
| |-- config // 路由配置和程序的基本信息配置
| |-- config.js // 配置项目的基本信息
| |-- routes.js // 配置页面路由
| |-- css // 各种css文件
| |-- common.css // 全局通用css文件
| |-- iconfont // 各种字体图标
| |-- images // 公共图片
| |-- less // 各种less文件
| |-- common.less // 全局通用less文件
| |-- config.less // 全局通用less配置文件
| |-- lib // 各种插件
| |-- route-data // 实现页面后退数据还原,滚动位置还原
| |-- mixins // 各种全局mixins
| |-- pull-list.js // 上拉加载
| |-- pages // 各种页面组件
| |-- about // 关于
| |-- index // 首页
| |-- login // 登录
| |-- my // 我的主页,和消息列表
| |-- signout // 退出
| |-- topic // 主题详情,主题新建
| |-- user // 查看用户资料
| |-- store // vuex的状态管理
| |-- index.js // 加载各种store模块
| |-- user.js // 用户store
| |-- template // 各种html文件
| |-- index.html // 程序入口html文件
| |-- util // 公共的js方法
| |-- app.vue // 页面入口文件
| |-- main.js // 程序入口文件,加载各种公共组件
|-- .babelrc // ES6语法编译配置
|-- webpack.config.js // 程序打包配置
|-- server.js // 开发时使用的服务器
|-- README.md // 项目说明
|-- package.json // 配置项目相关信息,通过执行 npm init 命令创建
.
扫一扫二维码查看效果
很漂亮,没用ui框架吗
@zannet 自己写的,不需要
界面风格我挺喜欢的,good!
I‘m webapp-cnodejs-vue
@shinygang 还是你的666
h很漂亮
我想问一句,你们这么有时间写的,上班不忙吗?
@huangyanxiong01 断断续续写了两个月。。。
来自vue-cnode手机版
@hfuuss 谢谢
来自vue-cnode手机版
@1340641314 请问你们现在为什么都在用vue2.0?react淘汰了吗?我用react写了一个,感觉你说的返回记录滚动条位置和数据都没有遇到问题。首先就是记录滚动条位置是在每次这个页面注销的时候记录一下scrollTop。至于第二个数据还原的话,react把数据放在redux的store里面,组件被加载进来的话会自动从store读取相应的数据,不需要重新请求。我看了一下你这个貌似从底栏切换的话,每次都要重新加载首页
@lumia2046 1.使用vue,没使用react,是为了照顾其他的人,因为react的jsx语法,学习成本相对来说比较高 2.以前也是将这些数据存储在redux或者vuex中,但是实际使用起来比较麻烦 3.至于每次从底部切换的时候,都会重新加载数据,这是他的机制决定的,可以看看这里的:https://github.com/lzxb/vue-cnode/issues/4
@lumia2046 其实主要还是因为vue的指令之类的,和后台套模板的方式比较类似,和后台人员解释起来相对来说比较简单。如果只是我一个人开发,react和vue的区别不是特别大,但是要带着后台一起玩,或者让后台自己玩,只能选择vue或者angularjs这样的框架。以前使用react开发过两个项目,总体还是后台还是比较抵触的,vue的话,在一场技术讨论中,后台的也是支持使用vue的
不是用cli生成的吗,正好可以用来学习,谢谢
@lumia2046 会降低后台对前端页面的掌控力
来自vue-cnode手机版
@FlyerJay 不是,自己搭的,所以没有热替换这些
来自vue-cnode手机版
我在用你的react版的哈哈,
来自react-cnode手机版
@wugy0103 那个是非常老的版本了,感觉写得并不好。现在在开发一个vue的缓存插件哈哈
mark 自豪地采用 CNodeJS ionic
不错不错,clone楼主的源码学习中
@artisan 多谢支持