Vue 项目实战系列 (二)

  上一章节我们已经把项目的初始化工作完成了,接下来我们再来进行具体的代码编写。这一节我们将完成如下的页面。

  我们在src/目录下新建一个views文件夹,存放我们的主要页面文件。目录结构如下:

  

  cinema.vue如下:

<template>
    <div>
        cinema
    </div>
</template>

  movie.vue如下:

<template>
    <div>
        movie
    </div>
</template>

  me.vue如下:

<template>
    <div>
        me
    </div>
</template>

  这里三个相当一级路由的路由页面就有了。然后再看看具体的footerNav这个组件如何写。一个组件一般包含三个部分:

<template>
  html部分
</template>
<script>
  js代码部分
</script>
<style>
  css样式部分
</style>

先看看template部分的代码:

<template>
    <footer>
        <section class="footer mint-1px-t">
            <!-- 当route是 / 的时候会有cur-page 这个class-->
              <nav class="nav nav-movie" :class="{'cur-page': route === '/'}">
                  <!-- router-link标签配置vue-router插件会路由到to 后面对应的页面 -->
                  <router-link to="/">
                      <div class="nav-icon">
                          <!-- 根据当前的路径展示不同的图片 -->
                          <img v-show="route !== '/'" src="../assets/images/hno.svg" alt="">
                          <img v-show="route === '/'" src="../assets/images/hok.svg" alt="">
                      </div>
                  </router-link>
              </nav>
              <nav class="nav nav-cinama" :class="{'cur-page': route === '/cinema'}">
                <router-link to="cinema">
                    <div class="nav-icon">
                        <img v-show="route !== '/cinema'" src="../assets/images/mno.svg" alt="">
                        <img v-show="route === '/cinema'" src="../assets/images/mok.svg" alt="">
                    </div>
                </router-link>
              </nav>
              <nav class="nav nav-me" :class="{'cur-page': route === '/me'}">
                  <router-link to="me">
                      <div class="nav-icon">
                          <img v-show="route !== '/me'" src="../assets/images/eno.svg" alt="">
                          <img v-show="route === '/me'" src="../assets/images/eok.svg" alt="">
                      </div>
                  </router-link>
              </nav>
          </section>
    </footer>
</template>

文件里对应的图片文件可以到 https://github.com/EzrealDeng/Taopiaopiao/tree/master/src/assets 上面获取,放到src assets目录下。

script部分如下:

<script>
    export default{
        data(){
            return {

            }
        },
        computed: {
            route () {
                return this.$route.path
            }
            //等价于 route : function(){
            //            return this.$route.path
            //        }
            //这种写法
            //
        }
    }
</script>

再加上style部分这个组件就算完成了。最终footerNav.vue代码如下:

<template>
    <footer>
        <section class="footer mint-1px-t">
            <!-- 当route是 / 的时候会有cur-page 这个class-->
              <nav class="nav nav-movie" :class="{'cur-page': route === '/'}">
                  <!-- router-link标签配置vue-router插件会路由到to 后面对应的页面 -->
                  <router-link to="/">
                      <div class="nav-icon">
                          <!-- 根据当前的路径展示不同的图片 -->
                          <img v-show="route !== '/'" src="../assets/images/hno.svg" alt="">
                          <img v-show="route === '/'" src="../assets/images/hok.svg" alt="">
                      </div>
                  </router-link>
              </nav>
              <nav class="nav nav-cinama" :class="{'cur-page': route === '/cinema'}">
                <router-link to="cinema">
                    <div class="nav-icon">
                        <img v-show="route !== '/cinema'" src="../assets/images/mno.svg" alt="">
                        <img v-show="route === '/cinema'" src="../assets/images/mok.svg" alt="">
                    </div>
                </router-link>
              </nav>
              <nav class="nav nav-me" :class="{'cur-page': route === '/me'}">
                  <router-link to="me">
                      <div class="nav-icon">
                          <img v-show="route !== '/me'" src="../assets/images/eno.svg" alt="">
                          <img v-show="route === '/me'" src="../assets/images/eok.svg" alt="">
                      </div>
                  </router-link>
              </nav>
          </section>
    </footer>
</template>
<script>
    export default{
        data(){
            return {

            }
        },
        computed: {
            route () {
                return this.$route.path
            }
            //等价于 route : function(){
            //            return this.$route.path
            //        }
            //这种写法
            //
        }
    }
</script>
<style>
    /*这里是样式文件*/
    .footer {
        background-color: #fff;
        position: fixed;
        width: 100%;
        bottom: 0px;
        height: 50px;
        display: -webkit-box; 
        padding-top: 7px;
        box-sizing: border-box;
        z-index: 10000;
    }
    .footer nav {
        -webkit-box-flex: 1;
        text-align: center;
        color: #8a869e;
    }
    .footer .cur-page.nav{
        color: #ff4d64;
    }
    .nav-icon {
        width: 22px;
        height: 22px;
        margin: 0 auto;
    }
    .nav-icon img {
        width: 100%;
        height: 100%;
    }
    .nav-movie::after,
    .nav-cinama::after,
    .nav-me::after {
        padding-top: 2px;
        text-align: center;
        width: 30px;
        display: inline-block;
        font-size: 12px;
    }
    .nav-movie::after {
        content: "电影";
    }
    .nav-cinama::after {
        content: "影院";
    }
    .nav-me::after {
        content: "我的";
    }
    .go-back {
        background: #ff2c43;
    }
    .back {
        font-size: 30px;
        color: #fff;
        padding-left: 35px;
        margin-top: -4px;
        transform: scaleY(1.5);
    }
</style>
View Code

由于这个部分是在整个app里都是会显示的,所以我们在App.vue里对组件进行引用。修改App.vue,如下:

<template>
  <div id="app">
    <router-view></router-view>
    <!--使用我们的footerNav组件 -->
    <footerNav></footerNav>
  </div>
</template>

<script>
//使用前必须进行引入
import footerNav from './components/footerNav.vue'
export default {
  data(){
    return {

    }
  },
  components:{
    footerNav
  }
}
</script>

<style>

</style>
View Code

然后再对route里的index.js进行修改,配置页面的路由策略,如下:

import Vue from 'vue'
import Router from 'vue-router'
//所有组件都要进行引用
import movie from '@/views/movie.vue'
import me from '@/views/me.vue'
import cinema from '@/views/cinema.vue'

Vue.use(Router)

export default new Router({
  routes: [
    {
      path: '/',//路径
      name: 'movie',
      component: movie //对应的组件
    },{
      path: '/me',
      name: 'me',
      component: me
    },{
      path: '/cinema',
      name: 'cinema',
      component: cinema
    }
  ]
})
View Code

最后一步工作进行在整个项目的入口文件根目录下的index.html文件做一个移动端的简单适配,加入meta标签,修改后如下:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <!-- 移动端适配 -->
    <meta name="viewport" content="width=device-width,user-scalable=no,initial-scale=1,maximum-scale=1,minimum-scale=1">
    <title>淘票票</title>
  </head>
  <body>
    <div id="app"></div>
    <!-- built files will be auto injected -->
  </body>
</html>
View Code

然后npm run build 启动项目,如果一切顺利应该会有如下页面。

注:本文出自博客园 https://home.cnblogs.com/u/mdengcc/ ,转载请注明出处。

原文地址:https://www.cnblogs.com/mdengcc/p/6800929.html