vue移动端 demo

移动端项目介绍

初始化项目

  1. vue init webpack vueShop
  2. 进入项目根目录 cnpm i
  3. npm run dev

Mint-Ui介绍

  1. cnpm i mint-ui -S
  2. 导入所有MintUI组件:

import MintUI from 'mint-ui'

  1. 导入样式表:

import 'mint-ui/lib/style.css'

  1. 挂载到Vue身上

Vue.use(MintUI)

  1. 在 vue 中使用 MintUI中的Button按钮和Toast弹框提示:

<mt-button type="primary" size="large">primary</mt-button>
Toast({
  message: '提示',
  position: 'bottom',
  duration: 5000
})

注意:使用css component 不需要单独引入组件,但是如果使用js component 并且调用了某方法则需要引入该方法

使用 MUI 代码片段

注意: MUI 不同于 Mint-UI,MUI只是开发出来的一套好用的代码片段,里面提供了配套的样式、配套的HTML代码段,类似于 Bootstrap; 而 Mint-UI,是真正的组件库,是使用 Vue 技术封装出来的 成套的组件,可以无缝的和 VUE项目进行集成开发;
因此,从体验上来说, Mint-UI体验更好,因为这是别人帮我们开发好的现成的Vue组件;
从体验上来说, MUI和Bootstrap类似;
理论上,任何项目都可以使用 MUI 或 Bootstrap,但是,MInt-UI只适用于Vue项目;

注意: MUI 并不能使用 npm 去下载,需要自己手动从 github 上,下载现成的包,自己解压出来,然后手动拷贝到项目中使用;

官网首页

文档地址

  1. 导入 MUI 的样式表:

import './lib/mui/css/mui.min.css'

  1. 根据官方提供的文档和example,尝试使用相关的组件

App.vue 组件的基本设置

  1. 头部的固定导航栏使用 Mint-UIHeader 组件;

  2. 底部的页签使用 muitabbar;

  3. 购物车的图标,使用 Font Awesome,首先下载包,然后在main.js引入font-awesome.min.css,最后通过类名使用即可

  4. 将底部的页签,改造成 router-link 来实现单页面的切换;

  5. 因缺少解析sass文件,需自己配置

   cnpm i sass-loader node-sass -S
  1. Tab Bar 路由激活时候设置高亮的两种方式:
  • 全局设置样式如下:

   .router-link-active{

       color:#007aff !important;

   }

  • 或者在 new VueRouter 的时候,通过 linkActiveClass 来指定高亮的类:

   // 创建路由对象

   var router = new VueRouter({

     routes: [

       { path: '/', redirect: '/home' }

     ],

     linkActiveClass: 'mui-active'

   });

hoem组件

  • 轮播图的实现
    1. 轮播图通过mint-UI的swiper实现
    2. 发现结构完成之后没有高度,所以自己设置高度
    3. 下载axios通过 cnpm i axios -S
    4. 引入axios 请求轮播图接口 拿到数据
    5. 将请求回来的数据赋值到data里面定义的swiperList,view循环swiperList并生成img
  • 将axios设置公有方法
    1. 在main.js 导入axios import axios from 'axios'
    2. Vue.prototype 通过Vue的原型添加axios方法
    3. 组件内部调用则通过 this.axios 调用
    4. 配置 axios请求 域名 axios.defaults.baseURL
  • 九宫格的实现
    1. 通过mui 九宫格实现基本布局
    2. 修改九宫格样式(搬砖操作)
    3. 设置九宫格图片路劲

组件切换动画

1. 给<router-view/>包裹transition标签
2. 通过样式添加动画效果
  .tabanim-enter{
    transform: translateX(100%);
  }

  .tabanim-leave-to{
    transform: translateX(-100%);
  }

  .tabanim-leave-active,.tabanim-enter-active{
    transition: all 0.3s ease-in-out;
  }
3. 去除滚动条
4. 设置动画模式

新闻列表

1. 配置路由  ( router-link跳转  router/index.js 配置路由规则  )
2. 完成结构 ( 通过mui的图文列表 ),注意:结构拿过来图片地址不对,自己修改
3. 修改样式
4. 发送接口请求数据,将请求回来的数据渲染到页面上

过滤时间

1. Vue.filter()定义全局过滤器
2. 通过moment 实现过滤逻辑  
第一步下载
cnpm i moment -S
第二步导入
import moment from 'moment'
第三步使用方法
Vue.filter('fmtDate',function(inp,fmt){
  return moment(inp).format(fmt);   
})
3. 使用过滤器

新闻详情页

1. 配置路由规则进入新闻详情页
2. 通过路由参数 传参将新闻列表id  传进 新闻详情页
3. 通过  this.$route.params.参数名获取参数 
4. 发送请求  将请求回来的数据赋值到data里面
5. 页面渲染

评论区域

1. 首先完成评论区域结构
    <h4>发表并论</h4>
    <textarea placeholder="请输入评论内容">

    </textarea>
    <input type="submit" value="发表评论">
2. 点击发表评论按钮
  • 首先给发表按钮注册点击事件
  • 点击按钮拿到输入框的值,怎么拿到?(v-model双向数据绑定)
  • 发送请求 将输入框的值交给后台
    1. 完成评论列表结构
<ul class="commentList">
  <li>
    <div>
      <span>第一楼</span>
      <span>用户:</span>
      <span>发表时间:</span>
    </div>
    <p>内容</p>
  </li>
</ul>
4. 获取评论列表数据
this.axios.get('/api/getcomments/'+this.id+'?pageindex='+this.pageindex).then(res=>{
  if(res.status == 200){
    this.commentList = res.data.message
  }
})
5. 渲染评论列表
6. 加载更多功能
  • 复制mui button 按钮结构
<button style="width:100%;" type="button" class="mui-btn mui-btn-danger mui-btn-outlined">
  加载更多
</button>
  • 给按钮注册点击事件,并让pageindex++后重新获取数据
  • 重新获取数据后会发现,数据被覆盖,要想不覆盖需要将数据合并
this.commentList = this.commentList.concat(res.data.message)
  • 完善点击发表评论将数据在页面上展示
this.commentList.unshift({
  add_time:new Date,
  content:this.commentVal,
  user_name:'匿名用户'
})

图片列表分类布局

1. 配置路由规则展示图片列表组件
2. 完成滑动导航结构布局
  • 导航使用mint-UI的Navbar的头部组建
<mt-navbar v-model="selected">
  <mt-tab-item id="1">option A</mt-tab-item>
  <mt-tab-item id="2">option B</mt-tab-item>
  <mt-tab-item id="3">option C</mt-tab-item>
</mt-navbar>
  • 修改选中时及默认的样式
a{
  color:#000;
}
.category{
  width:100%;
  overflow: scroll;
}
.mint-navbar{
  display: block;
  height:40px;
  width:480px;
  .mint-tab-item{
    float: left;
    width:80px;
  }
  .mint-tab-item.is-selected{
    border: 0;
    margin: 0;
  }
}
  • 实现滑动,利用超出滚动头条,将滚动条样式设置透明
::-webkit-scrollbar {
  width: 1px;
}
::-webkit-scrollbar-track {
    -webkit-box-shadow: inset 0 0 6px rgba(0,0,0,0);
    border-radius: 10px;
}
::-webkit-scrollbar-thumb {
    border-radius: 10px;
    background: rgba(0,0,0,0);
    -webkit-box-shadow: inset 0 0 6px rgba(0,0,0,0);
}
::-webkit-scrollbar-thumb:window-inactive {
    background: rgba(255,0,0,0);
}
3. 请求ajax数据,动态渲染导航条

图片列表图片布局

1. 完成图片列表基本结构
2. 动态获取数据并完成列表渲染
3. 实现图片懒加载效果 (利用mint-ui中的v-lazy)
4. 点击导航获取对应分类数据
  • 因为导航列表为一个组件,所以点击时间注册失败,此时我们可以手动给导航内容包裹一个a标签,然后给a标签注册点击事件
  • 当点击导航的时候应获取对应的图片列表,故将id传到事件函数内部,再赋值给与data里面的数据
  • 调用获取图片列表方法重新渲染数据

vue-preview的基本使用

1. 下载包 cnpm i vue-preview -S
2. 在main.js导入并挂载
import VuePreview from 'vue-preview'

Vue.use(VuePreview)
3. 使用组件  和 挂载数据
<template>
<vue-preview :slides="slide1" @close="handleClose"></vue-preview>
</template>

<script>
export default {
  data () {
    return {
      slide1: [
        {
          src: 'https://farm6.staticflickr.com/5591/15008867125_68a8ed88cc_b.jpg',
          msrc: 'https://farm6.staticflickr.com/5591/15008867125_68a8ed88cc_m.jpg',
          alt: 'picture1',
          title: 'Image Caption 1',
          w: 600,
          h: 400
        },
        {
          src: 'https://farm4.staticflickr.com/3902/14985871946_86abb8c56f_b.jpg',
          msrc: 'https://farm4.staticflickr.com/3902/14985871946_86abb8c56f_m.jpg',
          alt: 'picture2',
          title: 'Image Caption 2',
          w: 1200,
          h: 900
        }
      ]
    }
  },
  methods: {
    handleClose () {
      console.log('close event')
    }
  }
}
</script>
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,444评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,421评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,036评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,363评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,460评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,502评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,511评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,280评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,736评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,014评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,190评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,848评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,531评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,159评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,411评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,067评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,078评论 2 352

推荐阅读更多精彩内容