赞
踩
首先下载yarn
npm i -g yarn
再下载vue cil
打开cmd,输入
vue create vue-app
选择vue2
构建完成,项目目录如下
npm i element-ui -S
再main.js中写入以下内容导入ElementUI(全局引入):
- import Vue from 'vue'
- import App from './App.vue'
- import ElementUI from 'element-ui';
- import 'element-ui/lib/theme-chalk/index.css';
-
- Vue.config.productionTip = false
- Vue.use(ElementUI)
- new Vue({
- render: h => h(App),
- }).$mount('#app')
如果要部分引入,那么要配置babel,并导入部分
如下:
- import Vue from 'vue'
- import App from './App.vue'
- /* import ElementUI from 'element-ui'; */
- import {Row,Button} from 'element-ui';
- import 'element-ui/lib/theme-chalk/index.css';
-
- Vue.config.productionTip = false
- /* Vue.use(ElementUI) */
- Vue.use(Row)
- Vue.use(Button)
- new Vue({
- render: h => h(App),
- }).$mount('#app')
npm i vue-router@3.6.5
然后再router下面新建文件夹新建文件用于路由
在index.js中写入以下内容
- import Vue from 'vue'
- import VueRouter from 'vue-router';
- Vue.use(VueRouter)
- //创建路由组件,并导入
- import Home from '../view/Home.vue'
- import User from '../view/User.vue'
- //将路由与组件进行映射
- const routes =[
- {path:'/home', component: Home},
- {path:'/user', component: User}
-
- ]
- //创建router实例,并把映射传入
- const router =new VueRouter({
- routes
- })
- //将router导出
- export default router
- //将其导入主入口main.js,并挂载到Vue对象上
-
接下来要规定路由的出口
在App.vue下,当然也不是必须在这里,可以在很多地方规定出口
- <template>
- <div id="app">
- <!-- <el-row>
- <el-button>默认按钮</el-button>
- <el-button type="primary">主要按钮</el-button>
- <el-button type="success">成功按钮</el-button>
- <el-button type="info">信息按钮</el-button>
- <el-button type="warning">警告按钮</el-button>
- <el-button type="danger">危险按钮</el-button>
- </el-row> -->
- <router-view></router-view>
- </div>
- </template>
-
-
- <script>
- export default {
- name: "App"
- };
- </script>
可以让同样的组件在不同子组件中展示
新建一个main.vue
再进行导入index.js进行路由存储
- import Vue from 'vue'
- import VueRouter from 'vue-router';
- Vue.use(VueRouter)
- //创建路由组件,并导入
- import Home from '../view/Home.vue'
- import User from '../view/User.vue'
- import Main from '../view/Main.vue'
- //将路由与组件进行映射
- const routes =[
- //主路由
- {
- path:'/',
- component:Main,
- children:[
- //子路由
- {path:'/home', component: Home},
- {path:'/user', component: User}
- ]
- },
-
- ]
- //创建router实例,并把映射传入
- const router =new VueRouter({
- routes
- })
- //将router导出
- export default router
- //将其导入主入口main.js,并挂载到Vue对象上
-
再规定路由出口,谁是最上层的路由,在谁那规定出口
比如这个就是Main是主路由,其余二者为子路由
- <template>
- <div>
- <h1>我是main</h1>
- <router-view></router-view>
- </div>
-
- </template>
-
-
- <script>
- export default{
- data(){
- return {}
- }
- }
- </script>
这样就可以了
对于单一的页面元素,比如导航栏这种东西我们独划分出来作为一个单独的组件来管理,方便运维,在组件中新建一个组件,这里我写左侧导航栏用
在使用这个组件的主路由下引用组件
- <script>
- import CommondAside from '../components/CommondAsdie.vue'
- export default {
- data() {
- return {};
- },
- components:{
- CommondAside
- }
- };
- </script>
调用格式如下
<el-aside width="200px"><commond-aside></commond-aside></el-aside>
对菜单格式进行调整,在属性中寻找自己需要修改的属性。
向菜单中传递数据
- menuData: [
- {
- path: "/",
- name: "home",
- label: "首页",
- icon: "s-home",
- url: "Home/Home",
- },
- {
- path: "/mall",
- name: "mall",
- label: "商品管理",
- icon: "video-play",
- url: "MallManage/MallManage",
- },
- {
- path: "/user",
- name: "user",
- label: "用户管理",
- icon: "user",
- url: "UserManage/UserManage",
- },
- {
- label: "其他",
- icon: "location",
- children: [
- {
- path: "/page1",
- name: "page1",
- label: "页面1",
- icon: "setting",
- url: "Other/PageOne",
- },
- {
- path: "/page2",
- name: "page2",
- label: "页面2",
- icon: "setting",
- url: "Other/PageTwo",
- },
- ],
- },
- ]
'运行
那么拿到这么多数据后我们要怎么去改变菜单呢,这里我们使用computed属性进行数据的计算,同时进行绑定
- computed: {
- //没有子菜单
- noChildren() {
- return this.menuData.filter((item) => !item.children);
- },
- //有子菜单
- hasChildren() {
- return this.menuData.filter((item) => item.children);
- }
- },
这样就区分开了一级菜单和二级菜单
同时对于一级菜单的部分我们可以直接v-for进行动态渲染
- <el-menu-item v-for="item in noChildren" :key="item.name" :index="item.name">
- <!--:指的是v-bind,用来数据绑定 -->
- <i :class="`el-icon-${item.icon}`"></i><!-- 这里的冒号指的是动态字符串 ``并不是'' es6拼接写法 -->
- <span slot="title">{{ item.label }}</span>
- </el-menu-item>
观察数据,因为key要提供唯一且固定的值,所以我们在子菜单中所使用的值就是label,path等不同的唯一值
- <el-submenu
- v-for="item in hasChildren"
- :key="item.label"
- :index="item.label"
- >
- <template slot="title">
- <i :class="`el-icon-${item.icon}`"></i>
- <span slot="title">{{ item.label }}</span>
- </template>
- <el-menu-item-group v-for="subItem in item.children" :key="subItem.path">
- <el-menu-item :index="subItem.path">{{ subItem.label }}</el-menu-item>
- </el-menu-item-group>
- </el-submenu>
由于基本的css太过于繁琐,我们这里采取less去写
npm i less@4.1.2
npm i less-loder@6.0.0
- <style lang="less" scope>
- .el-menu-vertical-demo:not(.el-menu--collapse) {
- width: 200px;
- min-height: 400px;
- }
- </style>
这里在vue文件中引入,其中lang=“less”指的是引入less在这个style里面,然后scope是这个style只作用当前组件。
语法如下:(嵌套)
- .el-menu{
- height: 100vh;
- h3{
- color:#fff;
- text-align: center;
-
- }
- }
这里创建多个页面,因为数据中的/路径是home,所以我们要重定向,redirect:'/home'
- const routes =[
- //主路由
- {
- path:'/',
- component:Main,
- redirect:'/home',
- children:[
- //子路由
- {path:'/home', component: Home},
- {path:'/user', component: User},
- {path:'/mall', component: Mall},
- {path:'/page1', component: PageOne},
- {path:'/page2', component: PageTwo}
- ]
- },
-
- ]
在对应标签下调用点击函数,并使用&router.push方法进行跳转
- ClickMenu(item){
- this.$router.push(item.path)
- },
- ClickSubMenu(subItem){
- this.$router.push(subItem.path)
- }
这里vue限制了用户不能跳转到当前页面,所以要用逻辑去判断一下要跳转的页面是否与当前页面一致,如果不一致才要跳转,$route表示当前路由
- ClickMenu(item){
- if(this.$route.path!==item.path&& !(this.$route.path==='/home'&&(item.path==='/')))
- this.$router.push(item.path)
- },
- ClickSubMenu(subItem){
- if(this.$route.path!==subItem.path)
- this.$router.push(subItem.path)
- }
- <template>
- <div class="header-container">
- <div class="l-content">
-
- </div>
-
- <div class="r-content">
-
- </div>
- </div>
-
- </template>
-
- <script>
- export default {
- data(){
- return{}
- }
- }
- </script>
-
- <style lang="less" scoped>
- .header-container{
- background-color: #333;
- height: 60px;
- }
-
-
- </style>
在主页面进行覆盖padding
- <style lang="less" scoped>
- .el-header{
- padding:0;
- }
- </style>
npm i vuex@3.6.2
这里可能会有个错误,要修改json的设置,ctrl+shift+P,搜索首选项进行修改。
新建文件夹store,再新建index.js再创建其他组件的js,把需要改变的值放在state里面去管理,然后以事件形式采用提交函数调用mutations里面的修改函数,而需要被修改的页面去获取state里面的属性就完成了整个传递
state如下
- export default{
- state:{
- isCollapse:false
- },
- mutations: {
- collapseMenu(state){
- state.isCollapse= !state.isCollapse
- }
- }
- }
提交函数如下
- methods:{
- hadeleMenu(){
- this.$store.commit('collapseMenu')
- }
- }
获取函数如下
- isCollapse() {
- return this.$store.state.tab.isCollapse
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。