包学会之浅入浅出Vue.js:升学篇

上一篇《包学会之浅入浅出Vue.js:开学篇》中,我们初步了解单页面组件这个概念,现在通过一个项目,来进一步解析组件的应用吧,Go~

需求背景

组件库是做UI和前端日常需求中经常用到的,把一个按钮,导航,列表之类的元素封装起来,方便日常使用,调用方法只需直接写上或者这样的代码就可以,是不是很方便呢,接下来我们将要完成以下页面:

包学会之浅入浅出Vue.js:升学篇_第1张图片

这是我们组件库的首页,包含三个子页面,按钮页面、列表页面、导航页面;点击进去子页面会由路由来配置。先看我们的目录结构:

包学会之浅入浅出Vue.js:升学篇_第2张图片

pages目录存放我们的页面,包括首页和三个子页面;components目录存放我们的具体组件,包括按钮组件,箭头组件,列表组件和导航组件(组件和页面其实是一样的文件类型,只是由于功能不一样,我们就叫不同的称呼)

先看路由配置的代码吧!

路由配置

import Vue from 'vue'
import Router from 'vue-router'
// 引用页面模板->供路由使用
import index from '../pages/index.vue'
import pageQuiButton from '../pages/pageQuiButton.vue'
import pageQuiList from '../pages/pageQuiList.vue'
import pageQuiNav from '../pages/pageQuiNav.vue'

Vue.use(Router)

export default new Router({
  routes: [
    {
      path: '/',
      name: 'index',
      component: index
    },
    {
      path: '/btn',
      name: 'btn',
      component: pageQuiButton
    },
    {
      path: '/list',
      name: 'list',
      component: pageQuiList
    },
    {
      path: '/nav',
      name: 'nav',
      component: pageQuiNav
    }
  ]
})

有了上一篇的分析之后,这里应该很容易看出来几个路由地址

首页:http://localhost:8080/#/

按钮子页:http://localhost:8080/#/btn

列表子页:http://localhost:8080/#/list

导航子页:http://localhost:8080/#/nav

具体每一页的内容分别对应每一页的.vue文件,不知大家是否还记得入口页App.vue,这个文件承载着一些公用的元素,还有就是一个路由容器,我们的首页index.vue到时候也是挂载在路由容器中的,看看App.vue的代码

入口页App.vue

<template>
  <div id="app">
    <h1 class="page-title"><a href="#/">开发组件库a>h1>
    <router-view>router-view>
  div>
template>

<script>
  export default {
    name: 'app'
}
script>

<style scoped>
  @import './assets/css/App.css';
style>

简单分析一下入口页的代码,h1标签是一个公用元素,也就是说到时候每个子页面都会带着这个h1,他的作用就是方便我们快速回到首页,子页面的内容会注入到router-view中。这里值得关注的地方是style标签,我们可以在style标签里面直接写样式,也可以直接引入一个样式文件,scoped关键字表示这个样式是私有的,也就是说,即使两个组件写着一样的#app{}样式也不会冲突,程序会加上命名空间,这也就是为什么在script标签中有个name参数。

首页index.vue

<template>
  <div class="mod-module mod-parallel">
    <div class="img-list type-full">
      <div class="img-box">
        <p class="img-item">
          <a class="page-link" href="#/btn">按钮a>
        p>
      div>
      <div class="img-box">
        <p class="img-item">
          <a class="page-link" href="#/list">列表a>
        p>
      div>
      <div class="img-box">
        <p class="img-item">
          <a class="page-link" href="#/nav">导航a>
        p>
      div>
    div>
  div>
template>

<style scoped>
 @import './css/index.css';
style>

首页的代码也是非常简单,和我们平时写html差不多,就是几个跳转链接跳到对应的子页面,程序运行的时候,会将