vue 移动端音乐(1) 页面骨架开发

项目的目录结构:

api存放于后端请求相关的代码,包括ajax,jsonp请求;

common中存放通用性的资源,包括通用的字体文件和图片;

js  stylus

router是与路由相关的文件

store是存放vuex相关的文件

main.js为入口文件,渲染App的一个vue文件

app.vue中是一个简单的界面,我们在这里import所有的样式文件,index.styl是引入所有样式的一个文件

1.main.js是函数的入口,引入styl文件

import 'babel-polyfill'
import Vue from 'vue'
import App from './App'
import router from './router'
import fastclick from 'fastclick'
import VueLazyload from 'vue-lazyload'
/* 引入样式 */
import 'common/stylus/index.styl'
fastclick.attach(document.body) // 取消300ms的延时

Vue.use(VueLazyload, {
  loading: require('common/image/default.png') 
})
Vue.config.productionTip = false
/* eslint-disable no-new */
new Vue({
  el: '#app',
  router,
  render: h => h(App)
})

所以在App.vue中,模板的id为app,因为在main.js中,el:#app;,之后配置package.json和eslinc.js的相关配置

webpack.base.cong.js中可以配置别名

页面骨架开发部分

首先在index.html中,添加meta标签,回到package.json中添加相关依赖,fastclick解决移动端点击300ms延迟的问题,之后回到main,js中引入相关组件(之前在package.json中安装的),程序如上:

之后回到App.vue中,App.vue中包含两个组件,header和tab组件

2.编写m-header组件和tab组件,并在app.vue中引入组件

header.vue

<template>
  <div class="m-header">
    <div class="icon"></div>
    <h1 class="text">Chicken Music</h1>
    <router-link tag="div" class="mine" to="/user">
      <i class="icon-mine"></i>
    </router-link>
  </div>
</template>

<script type="text/ecmascript-6">
  export default {}
</script>

<style scoped lang="stylus" rel="stylesheet/stylus">
  @import "~common/stylus/variable"
  @import "~common/stylus/mixin"

  .m-header
    position: relative
    height: 44px
    text-align: center
    color: $color-theme
    font-size: 0
    .icon
      display: inline-block
      vertical-align: top
      margin-top: 6px
      width: 30px
      height: 32px
      margin-right: 9px
      bg-image('logo')
      background-size: 30px 32px
    .text
      display: inline-block
      vertical-align: top
      line-height: 44px
      font-size: $font-size-large
    .mine
      position: absolute
      top: 0
      right: 0
      .icon-mine
        display: block
        padding: 12px
        font-size: 20px
        color: $color-theme
</style>

开发vuerouter+tab.vue组件

在router文件夹下的index.js文件中,配置路由,之前是在main.js中直接配置路由,现在将路由文件的配置单独写在router文件夹下的index.js文件中,很明显我们的vuerouter对应四个组件,推荐,歌手,排行和搜索;引入组件并编写router数组

import Vue from 'vue'
import Router from 'vue-router'
import Recommend from 'components/recommend/recommend.vue'
import Singer from 'components/singer/singer.vue'
import Rank from 'components/rank/rank.vue'
import Search from 'components/search/search.vue'
import SingerDetail from 'components/singer-detail/singer-detail.vue' 
// 注册一下vue
Vue.use(Router)
// 配置路由
export default new Router({
  routes: [
    {
      path: '/',
      redirect: '/recommend'
    },
    {
      path: '/recommend',
      component: Recommend
    },
    {
      path: '/singer',
      component: Singer,
      children: [
        {
          path: ':id',
          component: SingerDetail
        }
      ]
    },
    {
      path: '/rank',
      component: Rank
    },
    {
      path: '/search',
      component: Search
    }
  ]
})

创建好Router之后,回到main.js,传入router,并将其添加到vue对象上

import router from './router'
new Vue({
  el: '#app',
  router,
  store,
  render: h => h(App)
})

这个router就是我们在router-index.js中export的实例,之后再App.vue中将路由出口router-view挂在到tab组件的下方

<template>
  <div id="app">
    <m-header></m-header>
    <tab></tab>
    <keep-alive>
       <router-view></router-view>
    </keep-alive>
    <player></player>
  </div>
</template>

我们通过导航栏切换viewrouter,所以我们将导航栏抽象成组件

<template>
  <div class="tab">
    <router-link tag="div" class="tab-item" to="/recommend">
      <span class="tab-link">推荐</span>
    </router-link>
    <router-link tag="div" class="tab-item" to="/singer">
      <span class="tab-link">歌手</span>
    </router-link>
    <router-link tag="div" class="tab-item" to="/rank">
      <span class="tab-link">排行
      </span>
    </router-link>
    <router-link tag="div" class="tab-item" to="/search">
      <span class="tab-link">搜索</span>
    </router-link>
  </div>
</template>

<script type="text/ecmascript-6">
  export default {}
</script>

<style scoped lang="stylus" rel="stylesheet/stylus">
  @import "~common/stylus/variable"
  .tab
    display: flex
    height: 44px
    line-height: 44px
    font-size: $font-size-medium
    .tab-item
      flex: 1
      text-align: center
      .tab-link
        padding-bottom: 5px
        color: $color-text-l
      &.router-link-active
        .tab-link
          color: $color-theme
          border-bottom: 2px solid $color-theme
</style>

app.vue中引入了header.vue和tab组件

 

<template>
  <div id="app">
    <m-header></m-header>
    <tab></tab>
    <keep-alive>
       <router-view></router-view>
    </keep-alive>
  </div>
</template>

<script  type="text/ecmascript-6">
import MHeader from 'components/m-header/m-header'
import Tab from 'components/tab/tab.vue'
export default {
  components: {
    MHeader,
    Tab
  }
}
</script>

<style scoped lang="stylus" rel="stylesheet/stylus">
</style>

3.在index.jds中 配置导航栏路由

import Vue from 'vue'
import Router from 'vue-router'
import Recommend from 'components/recommend/recommend.vue'
import Singer from 'components/singer/singer.vue'
import Rank from 'components/rank/rank.vue'
import Search from 'components/search/search.vue'
// 注册一下vue
Vue.use(Router)
// 配置路由
export default new Router({
  routes: [
    {
      path: '/',
      redirect: '/recommend'
    },
    {
      path: '/recommend',
      component: Recommend
    },
    {
      path: '/singer',
      component: Singer
    },
    {
      path: '/rank',
      component: Rank
    },
    {
      path: '/search',
      component: Search
    }
  ]
})

4. 配置完路由之后,将组件引入到vue的实例,在main.js中引入

import router from './router'

并传入到vue中

/* eslint-disable no-new */
new Vue({
  el: '#app',
  router,
  render: h => h(App)
})

5.在app.vue中渲染这些组件

 <keep-alive>
       <router-view></router-view>
  </keep-alive>

骨架搭建完成,接下来是获取数据

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值