1. 引言
通过前面的章节,我们已经学会了使用vue-router
来实现页面的跳转,有兴趣的同学可以参阅下:
- 《Vue系列教程(01)- 前端发展史》
- 《Vue系列教程(02)- Vue环境搭建、项目创建及运行》
- 《Vue系列教程(03)- Vue开发利器VsCode》
- 《Vue系列教程(04)- VsCode断点调试》
- 《Vue系列教程(05)- 基础知识快速补充(html、css、js)》
- 《Vue系列教程(06)- Vue调试神器(vue-devtools)》
- 《Vue系列教程(07)- Vue第一个程序(MVVM模式的引入)》
- 《Vue系列教程(08)- 基本语法》
- 《Vue系列教程(09)- 事件绑定》
- 《Vue系列教程(10)- Model数据内容双向绑定》
- 《Vue系列教程(11)- 组件详解》
- 《Vue系列教程(12)- Axios异步通信》
- 《Vue系列教程(13)- 计算属性(computed)》
- 《Vue系列教程(14)- 插槽(slot)》
- 《Vue系列教程(15)- 事件内容分发($emit)》
- 《Vue系列教程(16)- 模块打包器(webpack)》
- 《Vue系列教程(17)- 路由(vue-router)》
目前我们的案例界面都是比较简单的,网上其实有很多好看的UI
框架,它们很好的兼容了Vue
,本文以ElementUI为例作一个讲解。
2. ElementUI案例
ElementUI
官网地址:https://element.eleme.cn/#/zh-CN
ElementUI 是网站快速成型工具,一套为开发者、设计师和产品经理准备的基于 Vue 2.0 的桌面端组件库。
2.1 创建项目
① 新建elui-demo
项目:
vue create elui-demo
③使用vscode
导入:
2.2 安装依赖
这里需要安装vue-router、element-ui、sass-loader
和node-sass
四个插件。
① 在vscode
菜单栏,依次Terminal -> new Terminal
,打开控制台后,安装依赖:
#安装vue-routern npm install vue-router --save-dev #安装element-ui npm i element-ui -S #安装依赖 npm install # 安装SASS加载器 cnpm install sass-loader node-sass --save-dev
npm命令解释:
- npm install moduleName:安装模块到项目目录下
- npm install -g moduleName:-g的意思是将模块安装到全局,具体安装到磁盘哪个位置要看
npm config prefix
的位置 - npm install -save moduleName:
–save
的意思是将模块安装到项目目录下, 并在package
文件的dependencies
节点写入依赖,-S
为该命令的缩写 - npm install -save-dev moduleName:
–save-dev
的意思是将模块安装到项目目录下,并在package
文件的devDependencies
节点写入依赖,-D
为该命令的缩写
2.3 创建页面
① components
文件夹创建登录页面(Login.vue
),可以直接复制ElementUI的代码过来:
<template> <div> <el-form ref="loginForm" :model="form" :rules="rules" label-width="80px" class="login-box" > <h3 class="login-title">欢迎登录</h3> <el-form-item label="账号" prop="username"> <el-input type="text" placeholder="请输入账号" v-model="form.username" /> </el-form-item> <el-form-item label="密码" prop="password"> <el-input type="password" placeholder="请输入密码" v-model="form.password" /> </el-form-item> <el-form-item> <el-button type="primary" v-on:click="onsubmit('loginForm')" >登录</el-button > </el-form-item> </el-form> <el-dialog title="温馨提示" :visible.sync="dialogVisiable" width="30%" :before-close="handleClose" > <span>请输入账号和密码</span> <span slot="footer" class="dialog-footer"> <el-button type="primary" @click="dialogVisible = false" >确定</el-button > </span> </el-dialog> </div> </template> <script> export default { name: "Login", data() { return { form: { username: "", password: "", }, //表单验证,需要在 el-form-item 元素中增加prop属性 rules: { username: [ { required: true, message: "账号不可为空", trigger: "blur" }, ], password: [{ required: true, message: "密码不可为空", tigger: "blur" }], }, //对话框显示和隐藏 dialogVisible: false, }; }, methods: { onSubmit(formName) { //为表单绑定验证功能 this.$refs[formName].validate((valid) => { if (valid) { //使用vue-router路由到指定界面,该方式称为编程式导航 this.$router.push("/main"); } else { this.dialogVisible = true; return false; } }); }, }, }; </script> <style lang="scss" scoped> .login-box { border: 1px solid #dcdfe6; width: 350px; margin: 180px auto; padding: 35px 35px 15px 35px; border-radius: 5px; -webkit-border-radius: 5px; -moz-border-radius: 5px; box-shadow: 0 0 25px #909399; } .login-title { text-align: center; margin: 0 auto 40px auto; color: #303133; } </style>
② components
文件夹创建主页面(Main.vue
):
<template> <div> <h1>首页</h1> <router-link to="/login">跳转到登录页面</router-link> <router-view /> </div> </template> <script> export default { name: "Main", }; </script> <style scoped> </style>
2.4 配置路由
① 配置router
文件夹下的index.js
文件,内容如下:
//导入vue import Vue from 'vue'; import VueRouter from 'vue-router'; //导入组件 import Main from "../components/Main"; import Login from "../components/Login"; //使用 Vue.use(VueRouter); //导出 export default new VueRouter({ routes: [ { //首页 path: '/main', component: Main }, // 默认首页 { path: '/', redirect: '/main' }, //登录页 { path: '/login', component: Login }, ] })
② App.vue
里引入路由布局,代码如下:
<template> <div id="app"> <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; margin-top: 60px; } </style>
③ main.js
引入路由和ElementUI
:
import Vue from 'vue' import App from './App' import router from "./router" import ElementUI from 'element-ui' import 'element-ui/lib/theme-chalk/index.css' Vue.use(router) Vue.use(ElementUI) /* eslint-disable no-new */ new Vue({ el: '#app', router, render: h => h(App) })
2.5 运行程序
运行程序:
npm run serve
可以看到报错了(解决方案参考:https://blog.csdn.net/qq_43610311/article/details/116736803):
这是因为sass-loader的版本过高导致的编译错误,需要退回到7.3.1,输入以下命令:
# 卸载当前版本 npm uninstall sass-loader npm uninstall node-sass # 安装 sudo cnpm install sass-loader@7.3.1 --save-dev sudo cnpm install node-sass@4.14.1
运行的结果:
点击跳转: