学习springboot+vue笔记七--vue路由以及vuex的使用以及computed属性

项目的架构还是使用之前的。

vue路由使用

页面改造

使用之前的HelloWorld.vue拆分为几个vue
拆分之前的代码:

<template>
  <div>
    <el-container style="height:100vh">
     <el-aside :width="sideWidth +'px'" style="background-color: rgb(238, 241, 246);" >
      <el-menu  :default-openeds="['1', '3']" style="min-height:100%;overflow-x:hidden;width:100%"
      background-color="rgb(48,65,86)"
      text-color="#fff"
      active-text-color="#ffd04b"
      :collapse-transition="false"
      :collapse="isCollapse"
      >
      <div style="height:60px;line-height:60px;text-align:center">
        <img src="../assets/logo.png" alt="" style="width:20px;position:relative;top:5px;margin-right:5px">
        <b style="color:white;" v-show="logotext">后台管理系统</b>
      </div>
        <el-submenu index="1">
          <template slot="title">
             <i class="el-icon-location"></i>
            <span slot="title">导航一</span>
          </template>
          <el-menu-item-group>
            <template slot="title">
              分组一</template>
            <el-menu-item index="1-1">选项1</el-menu-item>
            <el-menu-item index="1-2">选项2</el-menu-item>
          </el-menu-item-group>
          <el-menu-item-group title="分组2">
            <el-menu-item index="1-3">选项3</el-menu-item>
          </el-menu-item-group>
          <el-submenu index="1-4">
            <template slot="title">选项4</template>
            <el-menu-item index="1-4-1">选项4-1</el-menu-item>
          </el-submenu>
        </el-submenu>
        <el-submenu index="2">
          <template slot="title">
            <i class="el-icon-menu"></i>
            <span slot="title">导航二</span>
          </template>
          <el-menu-item-group>
            <template slot="title">分组一</template>
            <el-menu-item index="2-1">选项1</el-menu-item>
            <el-menu-item index="2-2">选项2</el-menu-item>
          </el-menu-item-group>
          <el-menu-item-group title="分组2">
            <el-menu-item index="2-3">选项3</el-menu-item>
          </el-menu-item-group>
          <el-submenu index="2-4">
            <template slot="title">选项4</template>
            <el-menu-item index="2-4-1">选项4-1</el-menu-item>
          </el-submenu>
        </el-submenu>
        <el-submenu index="3">
          <template slot="title">
             <i class="el-icon-document"></i>
             <span slot="title">导航三</span>
          </template>
          <el-menu-item-group>
            <template slot="title">分组一</template>
            <el-menu-item index="3-1">选项1</el-menu-item>
            <el-menu-item index="3-2">选项2</el-menu-item>
          </el-menu-item-group>
          <el-menu-item-group title="分组2">
            <el-menu-item index="3-3">选项3</el-menu-item>
          </el-menu-item-group>
          <el-submenu index="3-4">
            <template slot="title">选项4</template>
            <el-menu-item index="3-4-1">选项4-1</el-menu-item>
          </el-submenu>
        </el-submenu>
      </el-menu>
  </el-aside>
  <el-container>
    <el-header style="font-size: 12px;border-bottom:1px solid #ccc; line-height: 60px; display: flex">
      <div style="flex:1;font-size:28px">
        <span :class="collapseBtnClass" style="cursor:poiner" @click="collapse"></span>
      </div>
      <div style="width:70px;font-size:14px">
        <span>王小虎</span>
      <el-dropdown trigger="click" >
        <i :class="arrowClass"  style="margin-left:5px" @click="changeIClass"></i>
        <el-dropdown-menu slot="dropdown" >
          <el-dropdown-item>查看</el-dropdown-item>
          <el-dropdown-item>新增</el-dropdown-item>
          <el-dropdown-item>删除</el-dropdown-item>
        </el-dropdown-menu>
      </el-dropdown>
      </div>
    </el-header>
    <el-main>
      <el-breadcrumb separator="/">
          <el-breadcrumb-item :to="{ path: '/' }">首页</el-breadcrumb-item>
          <el-breadcrumb-item>用户管理</el-breadcrumb-item>
      </el-breadcrumb>
      <div class="pard">
              <el-input style="width:200px" suffix-icon="el-icon-search" v-model="username" placeholder="请输入查询用户名"></el-input>
               <el-input style="width:200px" class="ml" suffix-icon="el-icon-search" v-model="real_name" placeholder="请输入查询真实姓名"></el-input>
              <el-button class="ml" type="primary" @click="load">搜索</el-button>
      </div>
      <div class="pard">
        <el-button type="warning" @click="handleAddUser()"><i class="el-icon-circle-plus-outline  mr
"></i>新增</el-button>
 <el-popconfirm
                confirm-button-text='确定'
                cancel-button-text='再考虑考虑'
                icon="el-icon-info"
                icon-color="red"
                title="确定删除吗?"
                @confirm ="delBatch"
              >
        <el-button type="info" slot="reference" class="ml mr" >
          <i class="el-icon-remove-outline mr" ></i>
          批量删除</el-button></el-popconfirm>
        <el-button type="primary"><i class="el-icon-bottom mr"></i>导入</el-button>
        <el-button type="primary"><i class="el-icon-top mr"></i>导出</el-button>
      </div>
      <el-table :data="tableData"  :header-cell-class-name="rowbgclass" @selection-change="handleSelectionChange">
         <el-table-column
      type="selection"
      width="55">
    </el-table-column>
        <el-table-column prop="id" label="ID" width="140"></el-table-column>
        <el-table-column prop="name" label="姓名" width="140">
        </el-table-column>
        <el-table-column prop="realName" label="真实姓名" width="120">
        </el-table-column>
        <el-table-column prop="address" label="地址">
        </el-table-column>
        <el-table-column label="操作">
          <template slot-scope="scope">
          <el-button type="success" @click="handleEditUser(scope.row)"><i class="el-icon-edit mr" ></i> 编辑</el-button>
           <el-popconfirm
                confirm-button-text='确定'
                cancel-button-text='再考虑考虑'
                icon="el-icon-info"
                icon-color="red"
                title="确定删除吗?"
                @confirm ="delUser(scope.row.id)"
              >
           <el-button class="ml" type="danger" slot="reference" ><i class="el-icon-delete mr"></i>删除</el-button></el-popconfirm>
           </template>
        </el-table-column>
      </el-table>
      <div style="padding:10px 0">
        <el-pagination
        @size-change="handleSizeChange"
        @current-change="handleCurrentChange"
        :current-page="pageNum"
        :page-sizes="[2, 5, 10, 15]"
        :page-size="pageSize"
      layout="total, sizes, prev, pager, next, jumper"
       :total="totalSize">
    </el-pagination>
      </div>
    </el-main>
  </el-container>
</el-container>
<el-dialog :title="userDialogTitle" :visible.sync="dialogFormVisible">
  <el-form :model="form" label-width="80px">
    <el-form-item label="用户名" >
      <el-input v-model="form.name" autocomplete="off"></el-input>
    </el-form-item>
    <el-form-item label="真实姓名" >
      <el-input v-model="form.realName" autocomplete="off"></el-input>
    </el-form-item>
    <el-form-item label="地址" >
      <el-input v-model="form.address" autocomplete="off"></el-input>
    </el-form-item>
  </el-form>
  <div slot="footer" class="dialog-footer">
    <el-button @click="dialogFormVisible = false">取 消</el-button>
    <el-button type="primary" @click="handleSaveUser()">确 定</el-button>
  </div>
</el-dialog>
  </div>
</template>
<script>
export default {
  name: 'HelloWorld',
    data() {
      return {
        tableData: [],
        totalSize:0,
        pageNum:1,
        pageSize:2,
        collapseBtnClass:'el-icon-s-fold',
        isCollapse: false,
        sideWidth:200,
        logotext:true,
        arrowClass:"el-icon-arrow-down",
        rowbgclass:"rowcbgclass",
        username:''  ,
        real_name:'' ,
        dialogFormVisible:false,
        form:{},
        userDialogTitle:'',
         multipleSelection: []
      }
    },
    created(){
      this.load();
    },
    methods:{
      collapse(){
          this.isCollapse=!this.isCollapse;
          if(!this.isCollapse){
            this.collapseBtnClass="el-icon-s-fold"
             this.sideWidth=200;
             this.logotext=true;
          }else{
            this.collapseBtnClass="el-icon-s-unfold"
            this.sideWidth=64;
            this.logotext=false;
          }
      },
      handleSizeChange(pageSize) {
        this.pageSize=pageSize;
        this.load();
      },
      handleCurrentChange(pageNum) {
        this.pageNum=pageNum;
        this.load();
      },
      load(){
        this.Req.get('/vueDemo/getPages',{
          params: {
            "pageNum": this.pageNum,
            "pageSize":this.pageSize,
            "name":this.username,
            "real_name":this.real_name
          }
        }).then(res=>{
          this.totalSize=res.total;
          this.tableData=res.records;
        })       
      },
      changeIClass(){
        if(this.arrowClass=='el-icon-arrow-down')
        {
          this.arrowClass='el-icon-arrow-up'}
          else{
            this.arrowClass='el-icon-arrow-down'
          }
      },
      handleAddUser(){
        this.dialogFormVisible=true;
        this.userDialogTitle="新增用户信息";
        this.form={};
      },
      handleSaveUser(){
        this.dialogFormVisible=false;
        this.Req.post('/vueDemo/user',this.form).then(res=>{
          if(res){
            this.$message("保存成功");
            this.load();
          }else{
            this.$message("保存失败")
          }
          })  
      },
      handleEditUser(row){
        this.dialogFormVisible=true;
        this.userDialogTitle="编辑用户信息";
        this.form=row;
      },
      delUser(id){
        this.Req.delete('/vueDemo/'+id).then(
          res=>{
            if(res){
              this.$message("删除成功!");
              this.load();
            }else{
              this.$message("删除失败,请联系管理员!");
            }
          }
        )
      },
      handleSelectionChange(val){
       this.multipleSelection=val;
      },
      delBatch(){
        var ids=this.multipleSelection.map(val=>val.id);
        this.Req.post('/vueDemo/del/delbatch',ids).then(
          res=>{
            console.log(res)
            if(res){
              this.$message("批量删除成功");
              this.load()
            }else{
              this.$message("批量删除成功,请检查");
            }
          }
        )
      }     
    }
}
</script>
<style scoped>
 .el-header {
    border-bottom: 1px solid #C0C0C0;
    color: #333;
    line-height: 60px;
  }
  .el-aside {
    color: #333;
  }
</style>

在src文件夹下新建一个view文件夹,把HelloWorld.vue放到view文件夹中,然后修改/router/index.js里面关于HelloWorld.vue的引用位置,这里不改为报错。
然后把HelloWorld.vue里面的页面分解拆分为:Aside.vue,Header.vue,User.vue
文件结构为:
在这里插入图片描述第一步先把拆解后的界面正常显示出来,先看下Aside.vue的代码:

<template>
  <div>
    <el-aside :width="sideWidth +'px'" style="background-color: rgb(238, 241, 246);height:100%" >
      <el-menu  :default-openeds="['1', '3']" style="min-height:100%;overflow-x:hidden;width:100%"
      background-color="rgb(48,65,86)"
      text-color="#fff"
      active-text-color="#ffd04b"
      :collapse-transition="false"
      :collapse="isCollapse"
      router
      >
      <div style="height:60px;line-height:60px;text-align:center">
        <img src="../assets/logo.png" alt="" style="width:20px;position:relative;top:5px;margin-right:5px">
        <b style="color:white;" v-show="logotext">后台管理系统</b>
      </div>
       <el-menu-item index="/" >
       <i class="el-icon-location"></i>
       首页</el-menu-item>
        <el-submenu index="2">
          <template slot="title">
            <i class="el-icon-menu"></i>
            <span slot="title">系统管理</span>
          </template>
            <el-menu-item index="/user">用户管理</el-menu-item>
        </el-submenu>
      </el-menu>
  </el-aside>
  </div>
</template>

<script>
export default {
    name:'AsidePage',
    data(){
      return{
        isCollapse: false,
        sideWidth:200,
        logotext:true,
      }
    },
    methods:{
      collapse(){
          this.isCollapse=!this.isCollapse;
          if(!this.isCollapse){
            this.collapseBtnClass="el-icon-s-fold"
             this.sideWidth=200;
             this.logotext=true;
          }else{
            this.collapseBtnClass="el-icon-s-unfold"
            this.sideWidth=64;
            this.logotext=false;
          }
         
      },
    }

}
</script>

<style>
</style>

header.vue的代码为:

<template>
  <div>
     <el-header style="font-size: 12px;border-bottom:1px solid #ccc; line-height: 60px; display: flex">
      <div style="flex:1;font-size:28px">
        <span :class="collapseBtnClass" style="cursor:poiner" @click="collapse"></span>
      </div>
      <div style="width:70px;font-size:14px">
        <span>王小虎</span>
      <el-dropdown trigger="click" >
        <i :class="arrowClass"  style="margin-left:5px" ></i>
        <el-dropdown-menu slot="dropdown" >
          <el-dropdown-item>查看</el-dropdown-item>
          <el-dropdown-item>新增</el-dropdown-item>
          <el-dropdown-item>删除</el-dropdown-item>
        </el-dropdown-menu>
      </el-dropdown>
      </div>
    </el-header>
  </div>
</template>
<script>
export default {
    name:'HeaderPage',
    data(){
      return{
        collapseBtnClass:'el-icon-s-fold',
        arrowClass:'el-icon-arrow-down'
      }
    },
    methods:{
      changeIClass(){
        this.arrowClass='el-icon-arrow-up'
      }
    }
}
</script>
<style>
</style>

User.vue代码:

<template>
  <div>
 <el-main>
      <el-breadcrumb separator="/">
          <el-breadcrumb-item :to="{ path: '/' }">首页</el-breadcrumb-item>
          <el-breadcrumb-item>用户管理</el-breadcrumb-item>
      </el-breadcrumb>
      <div class="pard">
              <el-input style="width:200px" suffix-icon="el-icon-search" v-model="username" placeholder="请输入查询用户名"></el-input>
               <el-input style="width:200px" class="ml" suffix-icon="el-icon-search" v-model="real_name" placeholder="请输入查询真实姓名"></el-input>
              <el-button class="ml" type="primary" @click="load">搜索</el-button>
      </div>
      <div class="pard">
        <el-button type="warning" @click="handleAddUser()"><i class="el-icon-circle-plus-outline  mr
"></i>新增</el-button>
 <el-popconfirm
                confirm-button-text='确定'
                cancel-button-text='再考虑考虑'
                icon="el-icon-info"
                icon-color="red"
                title="确定删除吗?"
                @confirm ="delBatch"
              >
        <el-button type="info" slot="reference" class="ml mr" >
          <i class="el-icon-remove-outline mr" ></i>
          批量删除</el-button></el-popconfirm>
        <el-button type="primary"><i class="el-icon-bottom mr"></i>导入</el-button>
        <el-button type="primary"><i class="el-icon-top mr"></i>导出</el-button>
      </div>
      <el-table :data="tableData"  :header-cell-class-name="rowbgclass" @selection-change="handleSelectionChange">
         <el-table-column
      type="selection"
      width="55">
    </el-table-column>
        <el-table-column prop="id" label="ID" width="140"></el-table-column>
        <el-table-column prop="name" label="姓名" width="140">
        </el-table-column>
        <el-table-column prop="realName" label="真实姓名" width="120">
        </el-table-column>
        <el-table-column prop="address" label="地址">
        </el-table-column>
        <el-table-column label="操作">
          <template slot-scope="scope">
          <el-button type="success" @click="handleEditUser(scope.row)"><i class="el-icon-edit mr" ></i> 编辑</el-button>
           <el-popconfirm
                confirm-button-text='确定'
                cancel-button-text='再考虑考虑'
                icon="el-icon-info"
                icon-color="red"
                title="确定删除吗?"
                @confirm ="delUser(scope.row.id)"
              >
           <el-button class="ml" type="danger" slot="reference" ><i class="el-icon-delete mr"></i>删除</el-button></el-popconfirm>
           </template>
        </el-table-column>
      </el-table>
      <div style="padding:10px 0">
        <el-pagination
        @size-change="handleSizeChange"
        @current-change="handleCurrentChange"
        :current-page="pageNum"
        :page-sizes="[2, 5, 10, 15]"
        :page-size="pageSize"
      layout="total, sizes, prev, pager, next, jumper"
       :total="totalSize">
    </el-pagination>
      </div>
      <el-dialog :title="userDialogTitle" :visible.sync="dialogFormVisible">
  <el-form :model="form" label-width="80px">
    <el-form-item label="用户名" >
      <el-input v-model="form.name" autocomplete="off"></el-input>
    </el-form-item>
    <el-form-item label="真实姓名" >
      <el-input v-model="form.realName" autocomplete="off"></el-input>
    </el-form-item>
    <el-form-item label="地址" >
      <el-input v-model="form.address" autocomplete="off"></el-input>
    </el-form-item>
  </el-form>
  <div slot="footer" class="dialog-footer">
    <el-button @click="dialogFormVisible = false">取 消</el-button>
    <el-button type="primary" @click="handleSaveUser()">确 定</el-button>
  </div>
</el-dialog>
    </el-main>
  </div>
</template>
<script>
export default {
name:'UserPage',
data(){
  return{
        rowbgclass:'.rowcbgclass',
        tableData: [],
        totalSize:0,
        pageNum:1,
        pageSize:2,
        username:''  ,
        real_name:'' ,
        dialogFormVisible:false,
        form:{},
        userDialogTitle:'',
        multipleSelection: []
  }
},
created(){
  this.load();
},
methods:{
   handleSizeChange(pageSize) {
        this.pageSize=pageSize;
        this.load();
      },
      handleCurrentChange(pageNum) {
        this.pageNum=pageNum;
        this.load();
      },
      load(){
        this.Req.get('/vueDemo/getPages',{
          params: {
            "pageNum": this.pageNum,
            "pageSize":this.pageSize,
            "name":this.username,
            "real_name":this.real_name
          }
        }).then(res=>{
          this.totalSize=res.total;
          this.tableData=res.records;
        })       
      },
      changeIClass(){
        if(this.arrowClass=='el-icon-arrow-down')
        {
          this.arrowClass='el-icon-arrow-up'}
          else{
            this.arrowClass='el-icon-arrow-down'
          }
      },
      handleAddUser(){
        this.dialogFormVisible=true;
        this.userDialogTitle="新增用户信息";
        this.form={};
      },
      handleSaveUser(){
        this.dialogFormVisible=false;
        this.Req.post('/vueDemo/user',this.form).then(res=>{
          if(res){
            this.$message("保存成功");
            this.load();
          }else{
            this.$message("保存失败")
          }
          })
       
      },
      handleEditUser(row){
        this.dialogFormVisible=true;
        this.userDialogTitle="编辑用户信息";
        this.form=row;
      },
      delUser(id){
        this.Req.delete('/vueDemo/'+id).then(
          res=>{
            if(res){
              this.$message("删除成功!");
              this.load();
            }else{
              this.$message("删除失败,请联系管理员!");
            }
          }
        )
      },
      handleSelectionChange(val){
       this.multipleSelection=val;
      },
      delBatch(){
        var ids=this.multipleSelection.map(val=>val.id);
        this.Req.post('/vueDemo/del/delbatch',ids).then(
          res=>{
            console.log(res)
            if(res){
              this.$message("批量删除成功");
              this.load()
            }else{
              this.$message("批量删除成功,请检查");
            }
          }
        )
      }
}
}
</script>

<style>

</style>

HelloWolrd.vue的代码为:

<template>
  <div>
    <el-container style="height:100vh">      
     <AsidePage></AsidePage>
  <el-container>
    <el-header >
    <HeaderPage></HeaderPage>
    </el-header>                
    <router-view></router-view>
  </el-container>
</el-container>
  </div>
</template>
<script>
import AsidePage from '../components/Aside.vue';
import HeaderPage from '../components/Header.vue';
export default {
  name: 'HelloWorld',
  components:{
      AsidePage,
      HeaderPage
    },
 
}
</script>
<style scoped>
 .el-header {
    /* background-color: #B3C0D1; */
    border-bottom: 1px solid #C0C0C0;
    color: #333;
    line-height: 60px;
  }
  .el-aside {
    color: #333;
  }

</style>

配置/router/index.js

import Vue from 'vue'
import VueRouter from 'vue-router'
import HelloWorld from '../view/HelloWorld';
import UserPage from '../components/User';
import HomePage from '../components/Home';

Vue.use(VueRouter)

const routes = [
  {
    path: '/',
    name: 'home',
    component: HelloWorld,
    children:[
      {
        path: '/',
        name: 'HomePage',
        component: HomePage,
      },
      {
        path: '/user',
        name: 'UserPage',
        component: UserPage,
      }
    ]
  
  },

 
]

const router = new VueRouter({
  mode: 'history',
  base: process.env.BASE_URL,
  routes
})

export default router

启动项目npm run serve
页面可以正常打开,布局也调整正常。
在这里插入图片描述细节方面我们再处理一下,比如菜单的收起和张开,页签再优化一下等等细节。因为涉及到aside.vue给header传值,可以使用子传父,父再传子的思路,但那样比较繁琐,也容易出错。我们直接使用vuex.

vuex使用

vuex 的安装

在vscode终端窗口,vue目录下输入
npm install vuex@3 -s
在这里插入图片描述在src/新建store文件夹,在src/store/下新建index.js,内容为:

import Vue from 'vue'
import Vuex from 'vuex'

Vue.use(Vuex)

const store = new Vuex.Store({
  state: {
    isCollapse:false,
    sideWidth:200,
    currentPathName:'',
    logotext:true
  },
  mutations: {
    changgeMenu (state) {
      state.isCollapse=!state.isCollapse
    },
    changeSideWidth(state){
      if(!state.isCollapse){
        state.sideWidth=200
        state.logotext=true;
      }
      else{state.sideWidth=52;
      state.logotext=false;
      }
    },
     setPath(state){
      return state.currentPathName
     }
  }
})
export default store;

同时在route/index.js增加路由守卫来监听路由变化:

router.beforeEach((to,from,next)=>{
  store.state.currentPathName=to.name;
  store.commit("setPath");
  next()
})

同时优化aside.vue和header.vue中的代码,增加computed属性。
aside监听属性为:

  computed:{
      isCollapse(){
        return this.$store.state.isCollapse
      },
      sideWidth(){
        return this.$store.state.sideWidth
      },
      logotext(){
        return this.$store.state.logotext
      }
    },

header.vue的计算属性。根据属性的名字即可知道,有些绑定的数据根据计算得来的,不在data进行声明了。

computed:{
      currentPathName(){
        return this.$store.state.currentPathName;
      }
    }

启动项目测试各项功能完整。
今天的重点是:
使用computed属性,是页面动态传值刷新的功能实现。
优化后的aside.vue完整代码为:

<template>
  <div>
    <el-aside :width="sideWidth +'px'" style="background-color: rgb(238, 241, 246);height:100%" >
      <el-menu  :default-openeds="['1', '3']" style="min-height:100%;overflow-x:hidden;width:100%"
      background-color="rgb(48,65,86)"
      text-color="#fff"
      active-text-color="#ffd04b"
      :collapse-transition="false"
      :collapse="isCollapse"
      router
      >
      <div style="height:60px;line-height:60px;text-align:center">
        <img src="../assets/logo.png" alt="" style="width:20px;position:relative;top:5px;margin-right:5px">
        <b style="color:white;" v-show="logotext">后台管理系统</b>
      </div>
       <el-menu-item index="/" >
       <i class="el-icon-location"></i>
       首页</el-menu-item>
        <el-submenu index="2">
          <template slot="title">
            <i class="el-icon-menu"></i>
            <span slot="title">系统管理</span>
          </template>
        
            <el-menu-item index="/user">用户管理</el-menu-item>
         
          
        </el-submenu>
        
      </el-menu>
  </el-aside>
  </div>
</template>

<script>
export default {
    name:'AsidePage',
  
    methods:{
      collapse(){
          this.isCollapse=!this.isCollapse;
          if(!this.isCollapse){
            this.collapseBtnClass="el-icon-s-fold"
             this.sideWidth=200;
             this.logotext=true;
          }else{
            this.collapseBtnClass="el-icon-s-unfold"
            this.sideWidth=64;
            this.logotext=false;
          }
         
      },
    },
    computed:{
      isCollapse(){
        return this.$store.state.isCollapse
      },
      sideWidth(){
        return this.$store.state.sideWidth
      },
      logotext(){
        return this.$store.state.logotext
      }
    },
  

}
</script>

<style>

</style>

header.vue完整代码为:

<template>
  <div>
     <el-header style="font-size: 12px;border-bottom:1px solid #ccc; line-height: 60px; display: flex">
      
      <div style="flex:1;font-size:28px">
        <span :class="collapseBtnClass" style="cursor:poiner" @click="collapse"></span>
      <el-breadcrumb separator="/" style="display:inline-block;margin-left:15px">
          <el-breadcrumb-item :to="{ path: '/' }">首页</el-breadcrumb-item>
          <el-breadcrumb-item>{{currentPathName}}</el-breadcrumb-item>
      </el-breadcrumb>
      </div>
      
      <div style="width:70px;font-size:14px">
        <span>王小虎</span>
      <el-dropdown trigger="click" >
        <i :class="arrowClass"  style="margin-left:5px" ></i>
        <el-dropdown-menu slot="dropdown" >
          <el-dropdown-item>查看</el-dropdown-item>
          <el-dropdown-item>新增</el-dropdown-item>
          <el-dropdown-item>删除</el-dropdown-item>
        </el-dropdown-menu>
      </el-dropdown>
      </div>
    
    </el-header>
  </div>
</template>

<script>
export default {
    name:'HeaderPage',
    data(){
      return{
        collapseBtnClass:'el-icon-s-fold',
        arrowClass:'el-icon-arrow-down'
      }
    },
    methods:{
      changeIClass(){
        this.arrowClass='el-icon-arrow-up'
      },
      collapse(){
        this.$store.commit('changgeMenu');
        this.$store.commit('changeSideWidth');
        if(this.$store.state.isCollapse){
          this.collapseBtnClass='el-icon-s-unfold'
        }else{
          this.collapseBtnClass='el-icon-s-fold'
        }
      }
    },computed:{
      currentPathName(){
        return this.$store.state.currentPathName;
      }
    }

}
</script>

<style>

</style>

router/index.js路由的完整代码为;

import Vue from 'vue'
import VueRouter from 'vue-router'
import HelloWorld from '../view/HelloWorld';
import UserPage from '../components/User';
import HomePage from '../components/Home';
import store from '@/store';

Vue.use(VueRouter)

const routes = [
  {
    path: '/',
    name: 'home',
    component: HelloWorld,
    children:[
      {
        path: '/',
        name: 'H首页',
        component: HomePage,
      },
      {
        path: '/user',
        name: '用户管理',
        component: UserPage,
      }
    ]
  },
]

const router = new VueRouter({
  mode: 'history',
  base: process.env.BASE_URL,
  routes
})
router.beforeEach((to,from,next)=>{
  store.state.currentPathName=to.name;
  store.commit("setPath");
  next()
})

export default router

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cngm110

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值