一、搭建Vue项目流程
1、安装nodejs
测试安装是否成功
$ npm -v
6.14.16
$ node -v
v12.22.12
2、全局安装npm install -g @vue/cli
,后续会使用到vue命令
$ vue --version
@vue/cli 5.0.8
3、使用vue create demo_project_fe
命令创建项目,使用箭头键来选择,确认使用回车键
![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/61bdb06ab6a44da3890b7d8b0c0caf27.png
成功界面
查看新建项目
$ cd demo_project_fe
$ ll
total 408
-rw-rw-r-- 1 work work 73 Dec 6 20:59 babel.config.js
-rw-rw-r-- 1 work work 279 Dec 6 20:59 jsconfig.json
drwxrwxr-x 571 work work 20480 Dec 6 20:59 node_modules
-rw-rw-r-- 1 work work 891 Dec 6 20:59 package.json
-rw-rw-r-- 1 work work 366868 Dec 6 20:59 package-lock.json
drwxrwxr-x 2 work work 4096 Dec 6 20:59 public
-rw-rw-r-- 1 work work 327 Dec 6 20:59 README.md
drwxrwxr-x 4 work work 4096 Dec 6 20:59 src
-rw-rw-r-- 1 work work 118 Dec 6 20:59 vue.config.js
4、执行npm run serve
启动项目
二、使用element-ui前端框架
官网:https://element.eleme.cn/#/zh-CN/component/installation
1、安装element-ui,使用命令npm i element-ui -S
2、在main.js中导入element-ui以及对应的css文件
import Vue from 'vue'
import ElementUI from 'element-ui'
import 'element-ui/lib/theme-chalk/index.css'
import App from './App.vue'
import router from './router'
Vue.config.productionTip = false
Vue.use(ElementUI)
new Vue({
router,
render: h => h(App),
}).$mount('#app')
三、使用Vue Router实现页面导航栏功能
官网:https://router.vuejs.org/zh/guide/advanced/dynamic-routing.html
1、使用npm install vue-router@3
命令安装Vue Router
2、在src目录下新建一个router目录,并新建一个index.js文件
import Vue from 'vue'
import Router from 'vue-router'
import MainComponent from '../components/MainComponent.vue'
import HelloWorld from '../components/HelloWorld.vue'
import Child1 from '../components/Child1Test.vue'
import Child2 from '../components/Child2Test.vue'
Vue.use(Router);
// 1. 定义一些路由
// 每个路由都需要映射到一个组件
const routes = [
{
path: '/',
component: MainComponent,
leaf: false,
name: 'MainComponent',
children: [
{
path: 'child1',
component: Child1,
leaf: true,
name: 'Child1'
},
{
path: 'child2',
component: Child2,
leaf: true,
name: 'Child2'
},
]
},
{
path: '/',
component: HelloWorld,
leaf: false,
name: 'HelloWorld',
children: [
{
path: 'child3',
component: Child1,
leaf: true,
name: 'Child3'
},
{
path: 'child4',
component: Child2,
leaf: true,
name: 'Child4'
},
]
},
]
let router = new Router({
mode: 'history',
routes: routes
});
export default router;
3、App.vue文件中使用<router-view>
组件作为路由主出口
<template>
<div id="app">
<router-view></router-view>
</div>
</template>
<script>
export default {
name: 'App',
components: {
}
}
</script>
<style>
#app {
font-family: Avenir, Helvetica, Arial, sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
text-align: center;
color: #2c3e50;
margin-top: 60px;
}
</style>
4、MainComponent.vue实现了使用<router-link>
组件跳转新路由地址,也通过引入CommonAside组件实现了导航栏功能
备注:<router-view>组件可以在多处使用
<template>
<div>
<h1>我是Main组件</h1>
<p>
<!-- 使用 router-link 组件来导航 -->
<!-- 通过传入 `to` 属性指定链接 -->
<!-- <router-link> 默认会被渲染成一个 `<a>` 标签 -->
<router-link to="/child1">Go To Ghild1</router-link>
<router-link to="/child2">Go To Ghild2</router-link>
</p>
<!-- 路由出口 -->
<!-- 路由匹配到的组件将渲染在这里 -->
<router-view></router-view>
<CommonAside/>
</div>
</template>
<script>
import CommonAside from '@/components/CommonAside.vue'
export default {
components: {
CommonAside
},
data() {
return {}
},
mounted() {
console.log('router:', this.$router);
}
}
</script>
5、CommonAside.vue中通过<el-menu>
组件的router属性可以实现在激活导航时以 index 作为 path 进行路由跳转。当然也可以不使用router属性,而是使用<router-link :to="{ name: subItem.name}">{{ subItem.name }}</router-link>
也可以实现子菜单内容跳转
<template>
<div>
<el-container>
<el-aside width="200px">
<el-menu
default-active="1-2"
router
class="el-menu-vertical-demo"
@open="handleOpen"
@close="handleClose"
:collapse="isCollapse"
>
<!-- index用于确定选中的菜单项,是唯一标识 -->
<!-- v-bind:(简写为:,用于属性绑定) -->
<div v-for="item in $router.options.routes" :key="item.name" :index="item.name">
<!-- 一级菜单、二级菜单 -->
<el-submenu :key="item.name" index="item.name">
<!-- slot表示插槽 -->
<template slot="title">
<!-- <i :class="`el-icon-${item.icon}`"></i> -->
<span slot="title">{{ item.name }}</span>
</template>
<!-- 对子菜单进行渲染 -->
<el-menu-item-group v-for="subItem in item.children" :key="subItem.path">
<el-menu-item :index="subItem.path">{{ subItem.name }}</el-menu-item>
</el-menu-item-group>
</el-submenu>
</div>
</el-menu>
</el-aside>
<el-main>
<router-view></router-view>
</el-main>
</el-container>
</div>
</template>
<script>
export default {
data() {
return {
//控制导航栏为展开模式
isCollapse: false
}
},
methods: {
handleOpen() {},
handleClose() {}
},
mounted() {
console.log('router:', this.$router);
}
}
</script>
页面效果: