咱们采用实战教学模式并结合 ElementUI
组件库,将所需知识点应用到实际中,以最快速度带领你们掌握 Vue 的使用。javascript
1. 建立名为hello-vue 的工程css
vue init webpack hello-vuevue
2. 安装所须要的依赖java
进入工程目录中node
npm install //安装基础依赖webpack
npm install vue-router --save-dev //安装路由依赖ios
npm i element-ui -S // 安装elementUI依赖web
cnpm install sass-loader node-sass --save-dev //安装css扩展性语言依赖vue-router
# 启动npm
npm run 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 moduleNam
e:--save-dev 的意思是将模块安装到项目目录下,并在 package 文件的 devDependencies 节点写入依赖,-D 为该命令的缩写把没有用的初始化东西删掉!
在源码目录中建立以下结构:
建立首页视图,在 views 目录下建立一个名为 Main.vue 的视图组件
建立登陆页视图在 views 目录下建立一个名为 Login.vue 的视图组件,其中 el-* 的元素为 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="dialogVisible" 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: '密码不可为空', trigger: '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>
建立路由,在 router 目录下建立一个名为 index.js
的 vue-router 路由配置文件
import Vue from 'vue' import Router from 'vue-router' import Login from "../views/Login" import Main from '../views/Main' Vue.use(Router); export default new Router({ routes: [ { // 登陆页 path: '/login', name: 'Login', component: Login }, { // 首页 path: '/main', name: 'Main', component: Main } ] });
配置路由,修改入口代码,修改 main.js 入口代码
import Vue from 'vue' import VueRouter from 'vue-router' import router from './router' // 导入 ElementUI import ElementUI from 'element-ui' import 'element-ui/lib/theme-chalk/index.css' import App from './App' // 安装路由 Vue.use(VueRouter); // 安装 ElementUI Vue.use(ElementUI); new Vue({ el: '#app', // 启用路由 router, // 启用 ElementUI render: h => h(App) });
修改 App.vue 组件代码
<template> <div id="app"> <router-view/> </div> </template> <script> export default { name: 'App', } </script>
测试 : 在浏览器打开 http://localhost:8080/#/login
若是出现错误: 多是由于sass-loader的版本太高致使的编译错误,当前最高版本是8.x,须要退回到7.3.1 ;
去package.json文件里面的 "sass-loader"的版本更换成7.3.1,而后从新cnpm install
就能够了;
嵌套路由又称子路由,在实际应用中,一般由多层嵌套的组件组合而成。一样地,URL 中各段动态路径也按某种结构对应嵌套的各层组件,例如:
一、用户信息组件,在 views/user 目录下建立一个名为 Profile.vue 的视图组件;
二、用户列表组件在 views/user 目录下建立一个名为 List.vue 的视图组件;
三、配置嵌套路由修改 router 目录下的 index.js 路由配置文件,代码如
import Vue from 'vue' import Router from 'vue-router' import Login from "../views/Login" import Main from '../views/Main' // 用于嵌套的路由组件 import UserProfile from '../views/user/Profile' import UserList from '../views/user/List' Vue.use(Router); export default new Router({ routes: [ { // 登陆页 path: '/login', name: 'Login', component: Login }, { // 首页 path: '/main', name: 'Main', component: Main, // 配置嵌套路由 children: [ {path: '/user/profile', component: UserProfile}, {path: '/user/list', component: UserList}, ] } ] });
说明:主要在路由配置中增长了 children 数组配置,用于在该组件下设置嵌套路由
四、修改首页视图,咱们修改 Main.vue 视图组件,此处使用了 ElementUI 布局容器组件,代码以下:
<template> <div> <el-container> <el-aside width="200px"> <el-menu :default-openeds="['1']"> <el-submenu index="1"> <template slot="title"><i class="el-icon-caret-right"></i>用户管理</template> <el-menu-item-group> <el-menu-item index="1-1"> <router-link to="/user/profile">我的信息</router-link> </el-menu-item> <el-menu-item index="1-2"> <router-link to="/user/list">用户列表</router-link> </el-menu-item> </el-menu-item-group> </el-submenu> <el-submenu index="2"> <template slot="title"><i class="el-icon-caret-right"></i>内容管理</template> <el-menu-item-group> <el-menu-item index="2-1">分类管理</el-menu-item> <el-menu-item index="2-2">内容列表</el-menu-item> </el-menu-item-group> </el-submenu> </el-menu> </el-aside> <el-container> <el-header style="text-align: right; font-size: 12px"> <el-dropdown> <i class="el-icon-setting" style="margin-right: 15px"></i> <el-dropdown-menu slot="dropdown"> <el-dropdown-item>我的信息</el-dropdown-item> <el-dropdown-item>退出登陆</el-dropdown-item> </el-dropdown-menu> </el-dropdown> </el-header> <el-main> <router-view /> </el-main> </el-container> </el-container> </div> </template> <script> export default { name: "Main" } </script> <style scoped lang="scss"> .el-header { background-color: #B3C0D1; color: #333; line-height: 60px; } .el-aside { color: #333; } </style>
说明:
在 <el-main> 元素中配置了 <router-view /> 用于展现嵌套路由,主要使用 <router-link to="/user/profile">我的信息</router-link> 展现嵌套路由内容
咱们常常须要把某种模式匹配到的全部路由,全都映射到同个组件。例如,咱们有一个 User 组件,对于全部 ID 各不相同的用户,都要使用这个组件来渲染。此时咱们就须要传递参数了;
一、修改路由配置, 主要是在 path 属性中增长了 :id 这样的占位符
{path: '/user/profile/:id', name:'UserProfile', component: UserProfile}
二、传递参数
此时咱们将 to 改成了 :to,是为了将这一属性当成对象使用,注意 router-link 中的 name 属性名称 必定要和 路由中的 name 属性名称 匹配,由于这样 Vue 才能找到对应的路由路径;
<router-link :to="{name: 'UserProfile', params: {id: 1}}">我的信息</router-link>
三、接收参数, 在目标组件中
{{ $route.params.id }}
一、修改路由配置 , 主要增长了 props: true 属性
{path: '/user/profile/:id', name:'UserProfile', component: UserProfile, props: true}
二、传递参数和以前同样
三、接收参数为目标组件增长 props 属性
重定向的意思你们都明白,但 Vue 中的重定向是做用在路径不一样但组件相同的状况下,好比:
说明:这里定义了两个路径,一个是 /main ,一个是 /goHome,其中 /goHome 重定向到了 /main 路径,由此能够看出重定向不须要定义组件;
使用的话,只须要设置对应路径便可;
路由模式有两种
修改路由配置,代码以下:
处理 404 建立一个名为 NotFound.vue
的视图组件,代码以下:
修改路由配置,代码以下:
beforeRouteEnter
:在进入路由前执行beforeRouteLeave
:在离开路由前执行
上代码:
一、安装 Axios cnpm install axios -s
二、main.js
引用 Axios
三、准备数据 : 只有咱们的 static 目录下的文件是能够被访问到的,因此咱们就把静态文件放入该目录下。
四、在 beforeRouteEnter 中进行异步请求
export default { props: ['id'], name: "UserProfile", beforeRouteEnter: (to, from, next) => { console.log("准备进入我的信息页"); // 注意,必定要在 next 中请求,由于该方法调用时 Vue 实例尚未建立,此时没法获取到 this 对象,在这里使用官方提供的回调函数拿到当前实例 next(vm => { vm.getData(); }); }, beforeRouteLeave: (to, from, next) => { console.log("准备离开我的信息页"); next(); }, methods: { getData: function () { this.axios({ method: 'get', url: 'http://localhost:8080/static/mock/data.json' }).then(function (repos) { console.log(repos); }).catch(function (error) { console.log(error); }); } } }