根据页面设计和组件拆分确定页面骨架开发,由于基于组件化的开发方式,把App.vue看成是页面得大的组件,大组件包括头部,导航区(控制内容区的切换),内容区包括商品、评价、商家这三个区块,这三个区块的切换会基于vue-router来实现。


组件划分

首先在App.vue的template层里面划分好三个大区块,即头部区块、导航区块、内容区块。

<div class="header">
    I am header!
</div>
<div class="tab">
    I am tab!
</div>
<div class="content">
    I am content!
</div>

接下来完成组件的引用,从父组件引用子组件。需要在App.vue中的script层里面去注册子组件。

import header from './components/header/header.vue'
export default {
  components: {
    'v-header': header //对header的注册
  }
}

如果直接使用header会报出一个警告,与原生标签名字相同,所以标签使用v-header。
export是否加default的区别:
在父组件引用过子组件后需要在子组件出口,在header.vue中的script层里编写export default {},这样就可以通过使用<v-header></v-header>来代替<div class="header"></div>了,相当于在父组件引用子组件就成功了。

导航区块

导航区块内容

导航区块包括三部分,商品、评论、商家。首先完成内容部分。

<div class="tab">
    <div class="tab-item">商品</div>
    <div class="tab-item">评论</div>
    <div class="tab-item">商家</div>
</div>

接下来完成它的样式部分。它是水平排列、三等分的布局。运用到移动端非常经典的flex布局

<style>
  #app //id用#,class用.
    .tab
      display: flex
      width: 100%
      height: 40px
      line-height: 40px
      .tab-item
        flex: 1
        text-align: center
</style>
导航区块路由实现

在main.js中引入并注册vue-router

第一步:把 vue-router 的 export 值赋值给变量 VueRouter 。

第二步:如果使用模块化机制编程,导入Vue和VueRouter,要调用 Vue.use(VueRouter),这样才能成功安装路由功能。

第三步:定义(路由)组件。可以从其他文件 import 进来。

第四步:定义路由。每个路由应该映射一个组件。 其中”component” 可以是通过 Vue.extend() 创建的组件构造器,或者只是一个组件配置对象。

第五步:创建 router 实例,然后传 routes 配置。

第六步:创建和挂载根实例。记得要通过 router 配置参数注入路由,从而让整个应用都有路由功能。

第七步:使用 router.push 设置打开项目后默认显示商品页面。

import VueRouter from 'vue-router'

// 如果使用模块化机制编程,导入Vue和VueRouter,要调用 Vue.use(VueRouter)
Vue.use(VueRouter)

//定义路由,每个路由应该映射一个组件。 其中"component" 可以是通过 Vue.extend() 创建的组件构造器,
//或者,只是一个组件配置对象。我们晚点再讨论嵌套路由
const routes = [
  {path: '/goods', component: goods},
  {path: '/ratings', component: ratings},
  {path: '/seller', component: seller}
]

//创建 router 实例,然后传 routes 配置,你还可以传别的配置参数, 不过先这么简单着吧。
const router = new VueRouter({
  linkActiveClass: 'active',
  routes  //(缩写)相当于 routes: routes
})

//创建和挂载根实例。记得要通过 router 配置参数注入路由,从而让整个应用都有路由功能
let vRouter = new Vue({
  el: '#app',
  router,
  render: h => h(App)
})
Vue.use({
  vRouter
})

//能够实现第一个默认页面是ratings页面
router.push('/ratings')

原来App.vue中使用 router-link 组件来进行商品、评价及商家这三个页面的导航,通过传入 to 属性指定链接,最后通过<router-view></router-view>将路由匹配到的组件渲染在内容区。内容修改为

<div class="tab border-1px">
   <div class="tab-item">
       <!-- 使用 router-link 组件来导航. -->
       <!-- 通过传入 `to` 属性指定链接. -->
       <!-- <router-link> 默认会被渲染成一个 `<a>` 标签 -->
      <router-link to="/goods">商品</router-link>
    </div>
    <div class="tab-item">
      <router-link to="/ratings">评论</router-link>
    </div>
    <div class="tab-item">
      <router-link to="/seller">商家</router-link>
    </div>
  </div>
  <router-view></router-view>
</div>