美文网首页vue.jsWeb前端之路让前端飞
vue2写单页面项目教程记录

vue2写单页面项目教程记录

作者: aermin | 来源:发表于2017-05-29 18:16 被阅读644次

    tips:接下去会在github写博客,简书不再更新和修改文章,欢迎大家逛逛我的新博客点击查看 ,我会尽量用更容易理解的方式写好每一篇博客,大家一起学习交流😄。

    前言

    一直想做个有数据内容的项目,刚好vue社区提供了API,在此感谢。
    这是一个基于vue+vue-cli+vue-router+axios+webpack开发的vue社区SPA;UI用Muse-UI;css用scssflex布局,rem做移动端适配,最终效果电脑端移动端都适配。

    如果你和我一样用vue还挺生疏的,那好好做完这个项目,会学到很多东西,能有挺大的进步,还可以自己加功能,一起(๑•̀ㅂ•́)و✧加油。

    如果对您有帮助,请给一个star鼓励一下萌新,感谢 ^ ^
    如果您也是前端萌新,来互相follow互相学习,一起进步呀。

    建议先去社区注册拿accesstoken登录体验(注册可以直接用github账号,挺快的)

    demo
    点击查看gif动图展示
    github项目地址
    项目API

    手机扫描查看效果

    完成功能

    • [x] 首页列表
    • [x] 下拉加载
    • [x] 用户信息(点击头像)
    • [x] 主题内容
    • [x] 登录功能
    • [x] 收藏(取消收藏)主题
    • [x] 评论列表
    • [x] 点赞(取消点赞)功能
    • [x] 消息中心(已读、未读)
    • [x] 个人中心
    • [x] 发表评论
    • [x] 回复评论
    • [x] 发布主题(支持markdown格式,可预览)

    todo功能

    • [ ] 左右侧滑
    • [ ] 搜索功能
    • [ ] vuex重构

    准备开发环境

    • $ npm install -g vue-cli
    • $ vue init webpack vue-home

    ? Project name vue-home ? Project description vue-home ? Author afei ? Vue build standalone ? Install vue-router? Yes ? Use ESLint to lint your code? No ? Setup unit tests with Karma + Mocha? No ? Setup e2e tests with Nightwatch? No

    • $ cd vue-home
    • $ npm install
    • $ npm run dev
      等写完项目后
    • $ npm run build

    注意:npm run dev 之后 默认浏览器打开的是http://localhost:8080 请换成http://localhost:8080/vue-home/dist
    如果你电脑的8080端口被占用,请congfig/index.js中找到port: 8080修改成8081或者其他可用的端口

    开始动手

    项目结构

    ├── build
    │   ├── build.js
    │   ├── check-versions.js
    │   ├── dev-client.js
    │   ├── dev-server.js
    │   ├── utils.js
    │   ├── vue-loader.conf.js
    │   ├── webpack.base.conf.js
    │   ├── webpack.dev.conf.js
    │   └── webpack.prod.conf.js
    ├── config
    │   ├── dev.env.js
    │   ├── index.js
    │   └── prod.env.js
    ├── dist                  //等写完项目后 $ npm run build 的打包文件
    │   ├── index.html
    │   └── static
    ├── index.html            //首页入口文件
    ├── node_modules
    ├── package.json          
    ├── src
    │   ├── App.vue           //项目入口文件
    │   ├── assets
    │   │   ├── 1495982696.png  //手机扫描二维码
    │   │   ├── logo.png        //vue logo
    │   │   └── sass            //sass通用样式
    │   ├── components          //组件
    │   │   ├── FooterNav.vue   //底部nav组件
    │   │   ├── HeaderBar.vue   //顶部横条
    │   │   ├── HeaderTabs.vue  //顶部tabs组件&主页面内容拉取
    │   │   └── Hello.vue        
    │   ├── main.js             //核心文件 在这里引入了Muse UI 时间过滤器
    │   ├── pages               //页面
    │   │   ├── content.vue     //帖子内容页面  
    │   │   ├── index.vue       //首页
    │   │   ├── login.vue       //登录页面
    │   │   ├── message.vue     //信息通知页面
    │   │   ├── more.vue        
    │   │   ├── my.vue          //个人信息页面
    │   │   ├── people.vue      //社区用户信息页面
    │   │   └── publish.vue     //发布帖子页面(此页面还没写完)
    │   ├── router              //路由与组件配置
    │   │   └── index.js 
    │   └── util                //时间过滤器,转换时间格式
    │       └── filter.js
    └── static
    

    vue-home/config/index.js

    vue-home/config/index.js图

    assetsPublicPath: '/vue-home/dist'

    这个公共路径原本为assetsPublicPath: '/',这样在本地服务器是可以跑,可是打包上传到github后会发现打开的页面是空白的,报错如下图。

    网页加载报错图

    原因是路径错了,vue-home是项目文件夹名称,dist是npm run build之后出现的文件夹,github上线就是读取dist文件夹而生成的网页(成功展示的demo地址长这样:http://www.hxvin.me/vue-home/dist/

    github图

    解决上线路径问题不知道还有没有其他更方便的解决方法,如果有,请跟我讲下哦

    port: 8080 这个是让你改端口的

    vue-home/src/App.vue

    vue-home/src/App.vue图

    rem适配移动端,1rem=10px

    html{
      font-size: 62.5%;
     
    }
    
    

    建议注释掉这段,不然会然干扰后面的css

      /*text-align: center;*/
      /*color: #2c3e50;
      margin-top: 60px;*/
    

    /vue-home/index.html

    /vue-home/index.html图

    我们是做的移动端,适配web端,所以在index.html里面加上meta

    <meta name="viewport" content="width=device-width,initial-scale=1,user-scalable=0">
    

    用MuseUI的添加之一

     <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,500,700,400italic">
     <link rel="stylesheet" href="https://fonts.googleapis.com/icon?family=Material+Icons">  
    

    vue-home/src/main.js

    vue-home/src/main.js图

    图中有标识了哪些是用来干嘛的,分别是用MuseUI的添加之一;filters是用来把社区api数据中的时间格式转换成*分钟前``*小时前``*天前

    关于新建主题功能

    api上写了需post

    title String 标题

    tab String 目前有 ask share job

    content String 主体内容

    • 记得还需要传递accesstoken的参数,不然会报403错误(资源不可用)

    markdown格式支持 直接 npm install marked --save 用法详见代码

    (代码好像用文章不方便介绍,我很详细地写了代码注释哦_

    相关文章

      网友评论

      • 6f453e11f26a:刚好想找怎么把社区api时间转换、美滋滋
        6f453e11f26a:以star
        aermin::grin: 有帮助求给个star
      • 鲁班小短腿:这是什么编辑器好漂亮
        aermin:@廿四 :+1:
        eadb962320cf: @北京程序员 visual studio code
      • a40b6545a91d:好累啊,写不了,还是懵逼,求带
        aermin:遇到什么问题你可以在github提issue,我详细解答哦。可以多google,看官方文档,看我的代码注释。加油!
      • b705e9029eb7:项目有没有讲解的步骤呢?如果没有的话,应该怎么去跟着做呢
        aermin:@旺旺小贝 项目里有较详细的代码注释哦,步骤的话首先用下脚手架,然后把需要用的东西下载去,比如Vue-router mouse UI scss axios,具体的页面需要下载啥东西碰到再说,然后一个页面一个页面去写,建议先从主页面做起,遇到问题再交流:blush:
      • a40b6545a91d:我还是有点不明白,vue2后面路由是没有map方法了
        aermin:@thumbchan 我建议看一遍官方路由2.0教程哦 写得挺详细的 https://router.vuejs.org/zh-cn/advanced/meta.html 一开始都会比较陌生 熟悉熟悉就好啦
        a40b6545a91d: @thumbchan 就是很多教程是1.0的,也就用的map方法,完全落伍了,所以新的呢教程很少。
        aermin:我路由没用map方法吧
      • a40b6545a91d:先学习学习
        aermin:api的内容很丰富,能很好的练手,一起加油(๑•̀ㅂ•́)و✧
      • JoyCorn:请教下,muse-ui貌似单位px 如何结合rem做响应式布局呢? 比如想单独设置某组件内的相关元素大小样式等.
        aermin:@Zoey_Yu 我看了下是可以哦 而且我代码里就有这样做 你看HeaderTabs.vue 里面tab组件我就是用rem控制height
        JoyCorn:@Hxvin 好像还是不行诶.. 就是元素里渲染出来后嵌套在里面的元素大小依然是固定的~ 还是谢谢啦
        aermin:给组件的相关元素添加新的样式覆盖应该就可以了哦 抱歉考试这么晚回复
      • 9179b6493ccb:这个项目对我很有意义:heart_eyes:
        aermin:@周泽彬 一起加油 遇到问题再交流
        9179b6493ccb:没问题
        aermin:哈哈 做完真的能学到很多 (๑•̀ㅂ•́)و✧加油 可以的话给个star哦:wink:

      本文标题:vue2写单页面项目教程记录

      本文链接:https://www.haomeiwen.com/subject/teqlfxtx.html