10.创建工程
创建工程—结合
ElementUI
组件库
注意: 命令行都要使用管理员模式运行
1、创建一个名为 hello-vue 的工程
1 | vue init webpack hello-vue |
2、安装依赖,我们需要安装 vue-router、element-ui、sass-loader 和 node-sass 四个插件
1 | # 进入工程目录 |
3、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 为该命令的缩写
创建登录页面
IDEA打开hello-vue文件夹
把没有用的初始化东西删掉!
在源码目录中创建如下结构:
- assets:用于存放资源文件
- components:用于存放 Vue 功能组件
- views:用于存放 Vue 视图组件
- router:用于存放 vue-router 配置
创建首页视图:在 views 目录下 创建名为 Main.vue 的视图组件;
1 | <template> |
创建登录页视图:在 views 目录下 创建名为 Login.vue 的视图组件,其中 el-* 的元素为 ElementUI 组件;
1 | <template> |
创建路由:在 router 目录下创建名为 index.js
的 vue-router 路由配置文件
1 | import Vue from 'vue' |
配置路由,修改入口代码,修改 main.js 入口代码
1 | import Vue from 'vue' |
修改 App.vue 组件代码
1 | <template> |
测试 :
1 | npm run dev |
在浏览器打开 http://localhost:8080/#/login
- 如果出现错误: 可能是因为
sass-loader
的版本过高导致的编译错误(当前最高版本是8.x,需要退回到7.3.1);
把package.json文件里面的 sass-loader
的版本更换成7.3.1,然后重新cnpm install
就可以了;
路由嵌套
嵌套路由又称子路由,在实际应用中,通常由多层嵌套的组件组合而成。同样地,URL 中各段动态路径也按某种结构对应嵌套的各层组件,例如:
1 | /user/profile /user/posts |
1、用户信息组件:在 views/user 目录下创建一个名为 Profile.vue 的视图组件;
1 | <template> |
2、用户列表组件:在 views/user 目录下创建一个名为 List.vue 的视图组件;
1 | <template> |
3、配置嵌套路由:修改 router/index.js 路由配置文件,代码如下。
1 | import Vue from 'vue' |
说明:主要在路由配置中增加了 children 数组配置,用于在该组件下设置嵌套路由
4、修改首页视图:修改 Main.vue 视图组件,此处使用了 ElementUI 布局容器组件,代码如下:
1 | <template> |
说明:
在 <el-main>
元素中配置了<router-view />
用于展示嵌套路由.
使用 <router-link to="/user/profile">
个人信息</router-link>
展示嵌套路由内容。
npm run dev
1
2
3
4
5
6
7
8
9
10
11
- http://localhost:8080/#/main
> 参数传递
经常需要把某种模式匹配到的所有路由,全都映射到同个组件。例如,有一个 User 组件,对于所有 ID 各不相同的用户,都要使用这个组件来渲染。此时就需要传递参数了;
1、修改路由配置,index.js:主要在 path 属性中增加了 :id 这样的占位符
```javascript
{path: '/user/profile/:id', name:'UserProfile', component: UserProfile}
2、传递参数,Main.vue
此时将 to 改为了 :to,是为了将这一属性当成对象使用,注意 router-link 中的 name 属性名称 一定要和 路由中的 name 属性名称 匹配,因为这样 Vue 才能找到对应的路由路径;
1 | <router-link :to="{name: 'UserProfile', params: {id: 1}}">个人信息</router-link> |
3、接收参数, 在目标组件Profile.vue中
1 | <div> |
使用 props 的方式
1、修改路由配置,index.js,:主要增加了 props: true
属性
1 | {path: '/user/profile/:id', name:'UserProfile', component: UserProfile, props: true} |
2、传递参数和之前一样
3、接收参数:目标组件增加 props 属性
1 | <template> |
组件重定向
Vue 中的重定向是作用在路径不同但组件相同的情况下,比如:
1 | { |
说明:这里定义了两个路径,一个是 /main ,一个是 /goHome,其中 /goHome 重定向到了 /main 路径,由此可以看出重定向不需要定义组件;
使用的话,只需要设置对应路径即可;
1 | <el-menu-item index="1-3"> |
路由模式与 404
路由模式有两种
- hash:路径带 # 符号,如 http://localhost/#/login
- history:路径不带 # 符号,如 http://localhost/login
修改路由配置,在index.js对应位置加history:
1 | export default new Router({ |
处理 404: views下创建名为 NotFound.vue
的视图组件,代码如下:
1 | <template> |
修改路由配置,在index.js 对应位置加以下代码:
1 | //导入路由 |
路由钩子与异步请求
beforeRouteEnter
:在进入路由前执行beforeRouteLeave
:在离开路由前执行
在List.vue的对应位置添加以下代码,运行后在浏览器控制台看效果:
1 | export default { |
参数说明:
- to:路由将要跳转的路径信息
- from:路径跳转前的路径信息
- next:路由的控制参数
- next() 跳入下一个页面
- next(‘/path’) 改变路由的跳转方向,使其跳到另一个路由
- next(false) 返回原来的页面
- next((vm)=>{}) 仅在 beforeRouteEnter 中可用,vm 是组件实例
在钩子函数中使用异步请求
1、安装 Axios
1 | cnpm install axios -s |
2、main.js
引用 Axios
1 | import axios from 'axios' |
3、准备数据 : 只有 static 目录下的文件是可以被访问到的,所以静态文件放该目录下。创建data.json文件,路径如下static/mock/data.json。
1 | { |
4、在 List.vue里的beforeRouteEnter 中进行异步请求。(即进入页面之前加载数据)
1 | export default { |
5、运行项目,在浏览器控制台看效果