(vue)elementUI实现登录以及导航栏子路由实现 ——学习记录

(vue)elementUI实现登录以及导航栏子路由实现

——学习记录

一、主要功能

使用vue,Element组件实现一个具有登录和主页面导航子路由功能实现
1.共有两个页面分别是登录页面,主页面。
2.实现登录与主页面跳转
3.主页面中导航子路由跳转


二、代码实现

1.安装ElementUI(只做一种方式演示)

具体安装详情网址https://element.eleme.cn/#/zh-CN/component/installation
npm 安装
推荐使用 npm 的方式安装,它能更好地和 webpack 打包工具配合使用。

npm i element-ui -S

引入成功会在package.json中出现 “element-ui”:以及相关版本
在这里插入图片描述
在这里插入图片描述
main.js中进行插入相关代码完成加载(具体加载步骤在上面网址中的快速上手中)
在这里插入图片描述
在这里插入图片描述


2.代码结构

本次项目中在views中存放登录以及主页面
在components文件中存放两个子页面
在index.js中配置路由
在这里插入图片描述

(1)index.js相关代码 :

import Vue from 'vue'
import VueRouter from 'vue-router'


Vue.use(VueRouter)

const routes = [
  {//登陆界面
    path: '/',
    name: 'login',
    component: () => import('../views/LoginView.vue'),

  },
  {//主界面
    path: '/main',
    name: 'main',
   
    component: () => import(/* webpackChunkName: "about" */ '../views/MainView.vue'),
    
    children: [
      {//导航子路由.1
        path: 'one',
        name: 'one',
        components: { main: () => import('../components/my-one-list.vue') }
        
      },
      {//导航子路由.2
        path: 'two',
        name: 'two',
        components: { main: () => import('../components/my-two-list.vue') }
      },
    
      
    ]

  },

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


(2)LoginView.vue代码

<template>

    <el-form :model="ruleForm" status-icon :rules="rules" ref="ruleForm" label-width="100px" class="demo-ruleForm">
        <el-form-item label="账号" prop="username">
    <el-input type="text" v-model="ruleForm.username" autocomplete="off"></el-input>
  </el-form-item>
  <el-form-item label="密码" prop="pass">
    <el-input type="password" v-model="ruleForm.pass" autocomplete="off"></el-input>
  </el-form-item>

  <el-form-item>
    <el-button type="primary" @click="submitForm('ruleForm')">提交</el-button>
    <el-button @click="resetForm('ruleForm')">重置</el-button>
  </el-form-item>
</el-form>

</template>
<script>
  export default {
    data() {     
        var validateUsername = (rule, value, callback) => {
        if (value === '') {
          callback(new Error('请输入账号'));
        } else {
          if (this.ruleForm.checkPass !== '') {
            this.$refs.ruleForm.validateField('checkUsername');
          }
          callback();
        }
      };

  
      var validatePass = (rule, value, callback) => {
        if (value === '') {
          callback(new Error('请输入密码'));
        } else {
          if (this.ruleForm.checkPass !== '') {
            this.$refs.ruleForm.validateField('checkPass');
          }
          else{this.$router.replace('/main');}
          callback();
        }
      };

      return {
        ruleForm: {
          pass: '123456',
          username:'admin'
        },
        rules: {
          pass: [
            { validator: validatePass, trigger: 'blur' }
          ],
          username: [
            { validator: validateUsername, trigger: 'blur' }
          ]
        }
      };
    },
    methods: {
      submitForm(formName) {
        this.$refs[formName].validate((valid) => {
          if (valid) {
            alert('submit!');
            this.$router.push('main')
          } else {
            console.log('error submit!!');
            return false;
          }
        });
      },
      resetForm(formName) {
        this.$refs[formName].resetFields();
      }
    }
  }
</script>

在网站上找到相关组件进行修改得到的实际页面效果
在这里插入图片描述
应用此组件进行加载
在这里插入图片描述
登录跳转地址在这里插入图片描述


(2)MainView.vue代码

<template>
  <el-container>
  <el-row class="tac">
    <el-col :span="4">
<el-aside :router="true">
      <el-menu :router="true" default-active="2" class="el-menu-vertical-demo" @open="handleOpen" @close="handleClose">
        <el-submenu index="1">
          <template slot="title">
            <i class="el-icon-location"></i>
            <span>导航一</span>
          </template>
          <el-menu-item-group>
            <template slot="title">分组一</template>
            <el-menu-item index="/main/one">
      
                选项1
 
            </el-menu-item>

     
              <el-menu-item index="/main/two">选项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">选项1</el-menu-item>
          </el-submenu>
        </el-submenu>
   
      </el-menu>  
     </el-aside>
    </el-col>
  </el-row>
  <el-main>
    <router-view name="main"></router-view>
  </el-main>

</el-container>
</template>
<script>
export default {
  methods: {
    handleOpen(key, keyPath) {
      console.log(key, keyPath);
    },
    handleClose(key, keyPath) {
      console.log(key, keyPath);
    }
  }
}
</script>

效果图如下:在这里插入图片描述

应用此组件进行加载增添修改
在这里插入图片描述
这个组件代码给了两个导航一种左侧样式,一种为右侧样式。注意区分,选择想要的样式进行套用。

注意事项:
1.组件中只是给了组件相关代码,需要自己添加结构例如: <el-container>
在这里插入图片描述
2.主界面显示子界面
在这里插入图片描述
<el-container></el-container>中加入 上述代码
(错了好多次才发现问题出现在这)

(3)子路由代码my-one-list.vue

<template>
    

<el-table
      :data="tableData"
      style="width: 100%">
      <el-table-column
        prop="date"
        label="日期"
        width="180">
      </el-table-column>   
      <el-table-column
        prop="name"
        label="姓名"
        width="180">
      </el-table-column>
      <el-table-column
        prop="address"
        label="地址">
      </el-table-column>
    </el-table>


</template>
<script>
    export default {
      data() {
        return {
          tableData: [{
            date: '2016-05-02',
            name: '王小虎',
            address: '上海市普陀区金沙江路 1518 弄'
          }, {
            date: '2016-05-04',
            name: '王小虎',
            address: '上海市普陀区金沙江路 1517 弄'
          }, {
            date: '2016-05-01',
            name: '王小虎',
            address: '上海市普陀区金沙江路 1519 弄'
          }, {
            date: '2016-05-03',
            name: '王小虎',
            address: '上海市普陀区金沙江路 1516 弄'
          }]
        }
      }
    }
  </script>

效果:
在这里插入图片描述

(4)子路由代码my-two-list.vue

<template>
    <div>
        index 页面 里 的 第二个 组件
    </div>
</template>

<script>
    export default {
        data() {
            return {
                
            };
        }
    }
</script>

<style>

</style>

效果:
在这里插入图片描述

(5)子路由

相关代码在index.js
在这里插入图片描述
使用children:[]将子路由含进去

总结

作为初学者这段时间学了很多东西,在这里分享一下学习经验,以及学习效果。Element-ui对于前端设计真的很方便,各种组件直接复制修改就可以应用到实际的需求中。

  • 11
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,实现顶部导航栏可以使用 Element UI 中的 `el-menu` 组件,具体实现步骤如下: 1. 安装 Element UI 通过 npm 安装 Element UI: ``` npm install element-ui -S ``` 2. 引入 Element UI 在 `main.js` 中引入 Element UI: ```js import Vue from 'vue' import ElementUI from 'element-ui' import 'element-ui/lib/theme-chalk/index.css' Vue.use(ElementUI) ``` 3. 编写顶部导航栏 ```html <template> <div> <el-menu mode="horizontal" :router="true"> <el-menu-item index="/">首页</el-menu-item> <el-submenu index="/products"> <template slot="title">产品</template> <el-menu-item index="/products/mobile">手机</el-menu-item> <el-menu-item index="/products/computer">电脑</el-menu-item> </el-submenu> <el-menu-item index="/about">关于我们</el-menu-item> </el-menu> <router-view></router-view> </div> </template> ``` 在 `el-menu` 中设置 `mode="horizontal"` 表示水平导航栏,设置 `:router="true"` 开启路由模式。使用 `el-menu-item` 和 `el-submenu` 分别表示菜单项和菜单。 4. 配置动态路由路由配置文件中,使用 `route` 方法实现动态路由: ```js import Vue from 'vue' import Router from 'vue-router' import Home from './views/Home.vue' import Products from './views/Products.vue' import Mobile from './views/Mobile.vue' import Computer from './views/Computer.vue' import About from './views/About.vue' Vue.use(Router) export default new Router({ routes: [ { path: '/', name: 'home', component: Home }, { path: '/products', name: 'products', component: Products, children: [ { path: 'mobile', name: 'mobile', component: Mobile }, { path: 'computer', name: 'computer', component: Computer } ] }, { path: '/about', name: 'about', component: About } ] }) ``` 在 `routes` 中配置路由规则,使用 `children` 表示路由。 这样就可以实现一个简单的带动态路由的顶部导航栏了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值