vue vue-router vuex element-ui axios的学习笔记(十七)改写learn目录

改写目录的原因

既然使用的是前后端分离的写法,就该彻底分离,我应该将后台管理页面也写在learn项目里面,现在这个结构就显得不合理了,进入后台管理页面应该是全新页面,现在的结构并不合理!

改写步骤

选区_018.png

1、新建一个admin目录

添加页面
admin.vue 用于管理后台路由
adminlogin.vue 用于后台管理员登录
home.vue 用于后台主页显示信息
mangeradmin.vue 用于管理管理员账户
mangeruser.vue 用于管理用户账户
mangerprods.vue 用于管理商品操作
mangersends.vue 用于管理用户发货

2、重新编写路由

打开route/index.js

import Vue from 'vue'
import Router from 'vue-router'
// 引入前端组件
import Home from '@/components/home'
import ConHome from '@/components/con-home'
import Login from '@/components/login'
import Regin from '@/components/regin'
import Page404 from '@/components/404'
import Products from '@/components/page/products'
import FAQ from '@/components/page/FAQ'
import Manger from '@/components/page/manger'
import My from '@/components/page/manger/my'
import Send from '@/components/page/manger/send'
import MyHistory from '@/components/page/manger/history'
import ProductList from '@/components/page/product/productlist'
import ProductContent from '@/components/page/product/productcontent'
// 引入后端管理组件
import Admin from '@/admin/admin'
import AdminLogin from '@/admin/views/adminlogin'
import AdminHome from '@/admin/views/adminhome'
import MangerAdmin from '@/admin/views/mangeradmin'
import MangerProds from '@/admin/views/mangerprods'
import MangerSends from '@/admin/views/mangersends'
import MangerUser from '@/admin/views/mangeruser'

Vue.use(Router)

export default new Router({
  // 配置路由
  routes: [
    // 前段页面路由
    {
      path: '/',
      hidden: true,
      type: 'client',
      component: Home,
      children: [
        {
          path: '/',
          hidden: true,
          component: ConHome
        },
        {
          path: '/products',
          name: '商品',
          class: 'el-icon-goods',
          component: Products,
          redirect: '/product/all',
          children: [
            {
              // 这里用的动态路由,需要一个冒号:
              path: '/product/:class',
              component: ProductList
            }
          ]
        },
        {
          path: '/product/:class/:productname',
          hidden: true,
          component: ProductContent
        },
        {
          path: '/FAQ',
          name: '文档',
          component: FAQ
        },
        {
          path: '/manger',
          name: '工作台',
          redirect: '/manger/my',
          component: Manger,
          hasChild: true,
          children: [
            {path: '/manger/my', name: '我的信息', component: My},
            {path: '/manger/send', name: '发货管理', component: Send},
            {path: '/manger/history', name: '发货记录', component: MyHistory}
          ]
        }
      ]
    },
    // 后端页面路由
    {
      path: '/admin',
      component: Admin,
      type: 'admin',
      hidden: true,
      children: [
        {
          path: '/admin',
          component: AdminHome,
          name: '管理首页'
        },
        {
          path: '/admin/mangeprods',
          name: '商品管理',
          component: MangerProds
        },
        {
          path: '/admin/mangesends',
          name: '订单管理',
          component: MangerSends
        },
        {
          path: '/admin/mangeuser',
          name: '用户管理',
          component: MangerUser
        },
        {
          path: '/admin/mangeadmin',
          name: '管理员账户',
          component: MangerAdmin
        }
      ]
    },
    // 登录注册以及404页面路由
    {
      path: '/admin/login',
      hidden: true,
      component: AdminLogin
    },
    {
      path: '/login',
      name: '',
      hidden: true,
      component: Login
    },
    {
      path: '/regin',
      name: '',
      hidden: true,
      component: Regin
    },
    {
      path: '*',
      hidden: true,
      component: Page404
    }
  ]
})

3、改写前端页面代码

这样重写路由之后会造成原来的导航菜单路由出错,所以需要改写前端导航的代码,主要是2个地方,更重要的是要改写前端结构

我的目的是要前端和后端页面是完全分离的,按原先的代码我直接将header.vue和footer.vue直接写在了APP.vue里面,这样的话会让我进入后端页面时也会渲染出头部和底部,这和我的想法是不一样的,所以首先改写APP.vue

1、打开APP.vue
将头部和底部抽离出来,放在home.vue里面

<template>
  <div id="app">
    <router-view></router-view>
  </div>
</template>

<script>

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

<style>
#app {
  font-family: 'Avenir', Helvetica, Arial, sans-serif;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-align: center;
  color: #2c3e50;
}
.container {
  width: 100%;
  max-width: 1366px;
  margin: 80px auto;
}
</style>

2、打开home.vue
添加头部和底部

<template>
  <div class="section">
    <!-- 头部组件渲染 -->
    <header-ly></header-ly>
    <!-- 中间主要区域容器 -->
    <!-- 添加一个element-ui内置的过渡动画 -->
    <transition name="el-zoom-in-center">
      <!-- 通过路由渲染不同内容的页面 -->
      <router-view/>
    </transition>
    <!-- 底部 -->
    <!-- 底部组件渲染 -->
    <footer-ly></footer-ly>
  </div>
</template>
<script>
  // 导入组件
import HeaderLy from '@/components/header'
import FooterLy from '@/components/footer'
export default {
    name: 'home',
    components: {
      HeaderLy,
      FooterLy
    }
}
</script>

3、新建一个con-home.vue来存放主页也就是home页面的内容
con-home.vue

<template>
  <div class="container">
    <h1>home</h1>
  </div>
</template>

4、改写header.vue的菜单设置

因为我现在只要前端的路由,这里我想了2种方法

  • 1、需要哪里的路由就找哪里的路由
选区_017.png

只需要将原来的

v-for="route in $router.options.routes"
// 改为
v-for="route in $router.options.routes[0].children"

这样的方法很简单,但是有一个弊端,我相当于把路由的顺序写死了,直接就找routes的第一个object,如果后期在routes里面又加入新的路由,这样很可能又需要改写一次,这样就很不灵活了,但很简单!!

  • 2、这个只是思路,我没做

首先再header.vue被创建的时候将routes用filter或者foreach的办法找出需要的那部分路由,比如加个字段 type: 'client'来表明这是前端路由,然后就这些路由数据写在data里面,再用来循环,这样就很灵活了,但稍微麻烦一点!

4、测试

前端页面

选区_019.png

头部的路由是正常的

选区_020.png

后端页面

选区_021.png

后端路由

选区_022.png

总结

还是经验太过欠缺了,要是一开始就有工程化思想的话,就不会有这些麻烦事了,接下来先把相关的后端页面和逻辑写好

github地址

learn:https://github.com/lyttonlee/learn
server: https://github.com/lyttonlee/express-server-for-learn

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,029评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,395评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,570评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,535评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,650评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,850评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,006评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,747评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,207评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,536评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,683评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,342评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,964评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,772评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,004评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,401评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,566评论 2 349

推荐阅读更多精彩内容

  • 1 石榴妹喜欢上了陈慕枫,而且一喜欢就是好几年。当年的陈慕枫是班里的风云人物,打架斗殴,喝酒抽烟,在网吧里打通...
    江隅阅读 386评论 2 3
  • 写在前面的话(吐槽┐(‘~`)┌):身为一名帝都大三医学狗,宿舍条件非常贫瘠,上下铺,5人间,全校只有一个大澡堂,...
    张妮妮阅读 1,178评论 5 10
  • 侗族最具代表性的建筑就是鼓楼和风雨桥。据说鼓楼是用来开会和外敌入侵鸣鼓警示,而风雨桥是为给过往行人躲避风雨...
    潇湘静女阅读 665评论 0 2
  • /温妮深山老林 从群芳争艳 到雪花飘飘 每个薄暮 不曾间断 签到你的房前 满怀期待 轻叩三下 常常失望惆怅而归...
    深山老林千年桃妖阅读 228评论 1 1
  • 我是河边一棵普通的垂柳。 我从小苗长成大树,年复一年,站在这河边。小鸟曾落在我的肩上,狂风曾吹散我的长发。云给我做...
    韦心草阅读 2,480评论 0 1