复习

  1. 熟悉ElementUI
    1. 前后端通信
    2. formatter 绑定函数
    3. 日期处理
    4. 分页
  2. js发展
    1. 服务端、桌面端、web端、app端
    2. nodejs js运行时环境,脱离web浏览器运行js
    3. js现代工具链
      1. nodejs
      2. npm 包管理器,管理依赖
      3. webpack 打包工具,构建工具
    4. 现代前端技术
      1. pug
      2. sass / less
      3. coffeescript / typescript
  3. npm命令
    1. npm -v
    2. npm init 创建一个node项目
    3. npm install 安装一个依赖 -g 全局安装
    4. npm run 运行指令
  4. package.json文件 类似于maven中的pom.xml
    1. 坐标
    2. 依赖
    3. 脚本命令 serve
  5. vue-cli 脚手架工具
    • vue create / vue ui

解析脚手架项目

node_modules node下载的依赖
public
src 源码

  • assets 图片等资源
  • components 组件
  • router 路由配置
  • views 视图,界面
  • App.vue 应用的容器
  • main.js 整个项目的入口 ```javascript //从vue依赖包当中导入Vue对象 import Vue from ‘vue’ //导入一个组件App import App from ‘./App.vue’ //导入vue-router,路由器 import router from ‘./router’

//关闭生产环境 Vue.config.productionTip = false

//实例化vue new Vue({ router, //引入路由器 render: h => h(App)//渲染App组件 }) .$mount(‘#app’)//挂载到App组件内部id为app的元素上

  1. package.json 项目管理文件
  2. 约定:<br />在文件夹下的index.js, 当引入文件夹时,默认读取index.js
  3. <a name="pAMB6"></a>
  4. ## 包
  5. js内部,封装多个方法或者类的一个工具,类似于java包<br />在包内部,导出数据和方法
  6. ```javascript
  7. function helloPlus(){
  8. hello();
  9. }
  10. function hello(){
  11. alert('123');
  12. }
  13. //导出的内容
  14. export default {
  15. delta : 1.99,
  16. sayHello: helloPlus
  17. }

需要使用时,引入

  1. import a from './a.js'
  2. a.sayHello();

单文件组件 .vue文件

before :

  1. Vue.component('todo-item',{
  2. template:`<li style="list-style:none">
  3. <input type="checkbox" name="" v-model="todo.state" id="">
  4. <span contenteditable @keydown.esc='handleCancel' @focus="save" @blur='handleChange' >{{todo.text}}</span>
  5. <span style='color:red;cursor:pointer' @click='del(todo)'>x</span>
  6. </li>`,//html的内容
  7. props:['todo'],//属性,
  8. data:function(){
  9. return {
  10. prev:this.todo.text
  11. }
  12. },
  13. methods:{
  14. del(todo){
  15. this.$emit("del",todo);//(1)在组件内触发一个自定义的事件,名为del,事件对象(事件内容)todo
  16. },
  17. handleChange(e){
  18. console.log("changing:"+this.prev +" canceled:"+this.canceled)
  19. this.todo.text=e.target.innerText;
  20. },
  21. handleCancel(e){
  22. console.log("cancel:"+this.prev)
  23. this.todo.text=this.prev;
  24. e.target.innerText=this.prev;
  25. e.target.blur();
  26. },
  27. save(){
  28. console.log("saving:"+this.todo.text)
  29. this.prev=this.todo.text
  30. }
  31. },
  32. mounted(){
  33. }
  34. });

after:
2021年6月25日Vue5 - 图1
现在我们获得:

一个 .vue 文件,就是一个组件

vue-router 路由器

单页面应用 Single Page Application SPA
不切换页面的情况下更新内容,极佳的用户体验,类似于App的使用体验,成为潮流
map.baidu.com
juejin.im
image.png
实例

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <title>Document</title>
  8. </head>
  9. <body>
  10. <div id="app">
  11. <!-- 使用 router-link 组件来导航. -->
  12. <!-- 通过传入 `to` 属性指定链接. -->
  13. <!-- <router-link> 默认会被渲染成一个 `<a>` 标签 -->
  14. <router-link to='/idx'>首页</router-link>
  15. <router-link to='/ctr'>个人中心</router-link>
  16. <!-- 路由出口 -->
  17. <!-- 路由匹配到的组件将渲染在这里 -->
  18. <router-view></router-view>
  19. </div>
  20. <script src="https://unpkg.com/vue/dist/vue.js"></script>
  21. <script src="https://unpkg.com/vue-router/dist/vue-router.js"></script>
  22. <script>
  23. //1. 定义两个组件
  24. let index = Vue.component('index',{
  25. template:'<div><h1>首页</h1></div>'
  26. });
  27. let center = Vue.component('center',{
  28. template:'<div><h1>个人中心</h1></div>'
  29. });
  30. //2. 定义路径与组件之间的映射关系
  31. const routes=[
  32. {path:'/idx',component:index},
  33. {path:'/ctr',component:center}
  34. ]
  35. //3. 创建路由对象
  36. const router = new VueRouter({routes});
  37. //4.将路由对象设置到Vue实例中,使之生效
  38. new Vue({
  39. router
  40. }).$mount('#app');
  41. </script>
  42. </body>
  43. </html>

动态路由

根据路径动态匹配组件

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <title>Document</title>
  8. </head>
  9. <body>
  10. <div id="app">
  11. <!-- 使用 router-link 组件来导航. -->
  12. <!-- 通过传入 `to` 属性指定链接. -->
  13. <!-- <router-link> 默认会被渲染成一个 `<a>` 标签 -->
  14. <router-link to='/idx'>首页</router-link>
  15. <router-link to='/ctr'>个人中心</router-link>
  16. <router-link to='/product/bottle'>产品介绍</router-link>
  17. <!-- 路由出口 -->
  18. <!-- 路由匹配到的组件将渲染在这里 -->
  19. <router-view></router-view>
  20. </div>
  21. <script src="https://unpkg.com/vue/dist/vue.js"></script>
  22. <script src="https://unpkg.com/vue-router/dist/vue-router.js"></script>
  23. <script>
  24. //1. 定义两个组件
  25. let index = Vue.component('index',{
  26. template:'<div><h1>首页</h1></div>'
  27. });
  28. let center = Vue.component('center',{
  29. template:'<div><h1>个人中心</h1></div>'
  30. });
  31. let product = Vue.component('product',{
  32. template:'<div><h1>产品介绍:{{$route.params.productName}}</h1></div>'
  33. });
  34. //2. 定义路径与组件之间的映射关系
  35. const routes=[
  36. {path:'/idx',component:index},
  37. {path:'/ctr',component:center},
  38. {path:'/product/:productName',component:product}
  39. ]
  40. //3. 创建路由对象
  41. const router = new VueRouter({routes});
  42. //4.将路由对象设置到Vue实例中,使之生效
  43. new Vue({
  44. router
  45. }).$mount('#app');
  46. </script>
  47. </body>
  48. </html>

嵌套路由

在组件内部存在路由链接及路由视图
在routes路由表中使用children表示嵌套的路由关系

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <title>Document</title>
  8. </head>
  9. <body>
  10. <div id="app">
  11. <!-- 使用 router-link 组件来导航. -->
  12. <!-- 通过传入 `to` 属性指定链接. -->
  13. <!-- <router-link> 默认会被渲染成一个 `<a>` 标签 -->
  14. <router-link to='/idx'>首页</router-link>
  15. <router-link to='/ctr'>个人中心</router-link>
  16. <!-- 路由出口 -->
  17. <!-- 路由匹配到的组件将渲染在这里 -->
  18. <router-view></router-view>
  19. </div>
  20. <script src="https://unpkg.com/vue/dist/vue.js"></script>
  21. <script src="https://unpkg.com/vue-router/dist/vue-router.js"></script>
  22. <script>
  23. //1. 定义两个组件
  24. let index = Vue.component('index',{
  25. template:'<div><h1>首页</h1></div>'
  26. });
  27. let center = Vue.component('center',{
  28. template:`<div>
  29. <h1>个人中心</h1>
  30. <!-- 嵌套路由的链接 -->
  31. <router-link to='/center/intro'>intro</router-link>
  32. <router-link to='/center/modify'>modify</router-link>
  33. <!-- 嵌套路由的出口 -->
  34. <router-view></router-view>
  35. </div>`
  36. });
  37. //嵌套路由的组件
  38. let intro = Vue.component('intro',{
  39. template:`<h2>个人介绍:大帅哥一个</h2>`
  40. })
  41. let modify = Vue.component('modify',{
  42. template:`<h2>修改个人信息</h2>`
  43. })
  44. //2. 定义路径与组件之间的映射关系
  45. const routes=[
  46. {path:'/idx',component:index},
  47. {
  48. path:'/ctr',
  49. component:center,
  50. children:[
  51. {path:'/center/intro', component: intro},
  52. {path:'/center/modify', component: modify}
  53. ]
  54. },
  55. ]
  56. //3. 创建路由对象
  57. const router = new VueRouter({routes});
  58. //4.将路由对象设置到Vue实例中,使之生效
  59. new Vue({
  60. router
  61. }).$mount('#app');
  62. </script>
  63. </body>
  64. </html>

编程式路由导航

调用this.$router.push方法进行跳转

  • 直接传链接
  • 传对象 ```html <!DOCTYPE html>

    1. <!-- 使用 router-link 组件来导航. -->
    2. <!-- 通过传入 `to` 属性指定链接. -->
    3. <!-- <router-link> 默认会被渲染成一个 `<a>` 标签 -->
    4. <router-link to='/login'>登录</router-link>
    5. <router-link to='/reg'>注册</router-link>
    6. <!-- 路由出口 -->
    7. <!-- 路由匹配到的组件将渲染在这里 -->
    8. <router-view></router-view>
  1. </div>
  2. <script src="https://unpkg.com/vue/dist/vue.js"></script>
  3. <script src="https://unpkg.com/vue-router/dist/vue-router.js"></script>
  4. <script>
  5. //1. 定义两个组件
  6. let reg = Vue.component('reg',{
  7. template:`
  8. <div>
  9. <h1>注册</h1>
  10. <input type="text" v-model='regForm.username' id="">
  11. <input type="password" v-model='regForm.password' id="">
  12. <button @click='doReg'>注册</button>
  13. </div>`,
  14. data(){
  15. return{
  16. regForm:{
  17. username:'',
  18. password:''
  19. }
  20. }
  21. },
  22. methods:{
  23. doReg(){
  24. console.log(this.regForm);
  25. alert('注册成功');
  26. console.log(this.$router);
  27. // this.$router.push('/login'); //直接传链接
  28. this.$router.push({path:'/login',query:{username:'zhangsan'}});//传对象
  29. }
  30. }
  31. });
  32. let login = Vue.component('login',{
  33. template:'<div><h1>登录 {{$route.query.username}}</h1></div>'
  34. });
  35. //2. 定义路径与组件之间的映射关系
  36. const routes=[
  37. {path:'/login',component:login},
  38. {path:'/reg',component:reg}
  39. ]
  40. //3. 创建路由对象
  41. const router = new VueRouter({routes});
  42. //4.将路由对象设置到Vue实例中,使之生效
  43. new Vue({
  44. router
  45. }).$mount('#app');
  46. </script>

  1. <a name="AvJBr"></a>
  2. ### 路由守卫
  3. 在跳转过程中检查是否有权限跳转到目标链接<br />全局:前置守卫、解析守卫、后置钩子<br />局部:单个路由内部、组件内部<br />完整的导航流程 : [https://router.vuejs.org/zh/guide/advanced/navigation-guards.html#%E5%AE%8C%E6%95%B4%E7%9A%84%E5%AF%BC%E8%88%AA%E8%A7%A3%E6%9E%90%E6%B5%81%E7%A8%8B](https://router.vuejs.org/zh/guide/advanced/navigation-guards.html#%E5%AE%8C%E6%95%B4%E7%9A%84%E5%AF%BC%E8%88%AA%E8%A7%A3%E6%9E%90%E6%B5%81%E7%A8%8B)
  4. ```javascript
  5. //添加全局的前置守卫
  6. router.beforeEach((to,from,next)=>{
  7. if(to.path=='/reg'){
  8. alert("目前尚未开放注册!")
  9. return;
  10. }
  11. //放行
  12. next();
  13. });

路由的参数:
每个守卫方法接收三个参数:

  • **to: Route**: 即将要进入的目标 路由对象
  • **from: Route**: 当前导航正要离开的路由
  • **next: Function**: 一定要调用该方法来resolve这个钩子。执行效果依赖next方法的调用参数。
    • **next()**: 进行管道中的下一个钩子。如果全部钩子执行完了,则导航的状态就是 confirmed (确认的)。
    • **next(false)**: 中断当前的导航。如果浏览器的 URL 改变了 (可能是用户手动或者浏览器后退按钮),那么 URL 地址会重置到 from 路由对应的地址。
    • **next('/')** 或者 **next({ path: '/' })**: 跳转到一个不同的地址。当前的导航被中断,然后进行一个新的导航。你可以向 next 传递任意位置对象,且允许设置诸如 replace: truename: 'home' 之类的选项以及任何用在 [router-link](https://router.vuejs.org/zh/api/#to)[to](https://router.vuejs.org/zh/api/#to) prop[router.push](https://router.vuejs.org/zh/api/#router-push) 中的选项。
    • **next(error)**: (2.4.0+) 如果传入 next 的参数是一个 Error 实例,则导航会被终止且该错误会被传递给 [router.onError()](https://router.vuejs.org/zh/api/#router-onerror) 注册过的回调。

代码

main.js

  • 实例化Vue
  • 挂载到App.vue
  • 导入router文件夹 引入了vue-router

App.vue

  • 页面骨架 router-link 、 router-view

router文件夹 index.js

  • 配置路由器,提供了路由表 (路径 和 组件映射)
  • 根据路由表将多个组件组织起来
  • / => Home
    • Home.vue
      • 引入了HelloWorld组件(import Helloworld ; 在 组件的实例中使用 components注册)

image.png

开发一个页面

  1. 编写页面 ```vue
  1. 2. App.vue增加链接
  2. ```vue
  3. <router-link to="/">Home</router-link> |
  4. <router-link to="/about">About</router-link> |
  5. >>>>> <router-link to="/center">个人中心</router-link>
  1. 在router/index.js中配置路径映

image.png

使用axios

  1. 在项目根目录(package.json所在目录)下 npm add axios (本质是在package.json中添加axios依赖,并执行install拉取)
  2. 在main.js中引入并绑定到vue上 ```javascript import axios from ‘axios’

//定制axios 具体可以定制的选项,参考https://www.kancloud.cn/yunye/axios/234845 请求配置一节 var instance = axios.create({ baseURL: ‘http://localhost:8000‘, timeout: 1000 }); //将axios绑定到Vue上,全局变量 Vue.prototype.$http=instance;

  1. 3. 在其他组件即可使用
  2. ```json
  3. this.$http.get("/getPersonInfo",{
  4. params:{
  5. id:1
  6. }
  7. }).then(resp=>{
  8. if(resp.status==200&&resp.data.success){
  9. this.person=resp.data.data;
  10. }
  11. }).catch(error=>{
  12. console.error("加载出错",error);
  13. })

如果报依赖缺失,执行 cnpm install

  1. These dependencies were not found:
  2. * core-js/modules/es.object.to-string.js in ./src/router/index.js
  3. * core-js/modules/es.string.iterator.js in ./src/router/index.js
  4. * core-js/modules/web.dom-collections.iterator.js in ./src/router/index.js

使用elementUI

  1. 添加依赖 cnpm i element-ui -S
  2. 在main.js中启用element ```javascript //引入element import ElementUI from ‘element-ui’; import ‘element-ui/lib/theme-chalk/index.css’;

Vue.use(ElementUI);

  1. 3. 使用elementUI
  2. ```vue
  3. <template>
  4. <div class="about">
  5. <el-container>
  6. <el-header>
  7. <el-menu default-active="1" class="el-menu-demo" mode="horizontal">
  8. <el-menu-item index="1">处理中心</el-menu-item>
  9. <el-submenu index="2">
  10. <template slot="title">我的工作台</template>
  11. <el-menu-item index="2-1">选项1</el-menu-item>
  12. <el-menu-item index="2-2">选项2</el-menu-item>
  13. <el-menu-item index="2-3">选项3</el-menu-item>
  14. <el-submenu index="2-4">
  15. <template slot="title">选项4</template>
  16. <el-menu-item index="2-4-1">选项1</el-menu-item>
  17. <el-menu-item index="2-4-2">选项2</el-menu-item>
  18. <el-menu-item index="2-4-3">选项3</el-menu-item>
  19. </el-submenu>
  20. </el-submenu>
  21. <el-menu-item index="3" disabled>消息中心</el-menu-item>
  22. <el-menu-item index="4"><a href="https://www.ele.me" target="_blank">订单管理</a></el-menu-item>
  23. </el-menu>
  24. </el-header>
  25. <el-main>
  26. <el-form :inline="true" :model="searchForm" class="demo-form-inline">
  27. <el-form-item label="教师姓名">
  28. <el-input v-model="searchForm.teacherName" placeholder="教师姓名"></el-input>
  29. </el-form-item>
  30. <el-form-item label="审核状态">
  31. <el-select clearable v-model="searchForm.state" placeholder="审核状态">
  32. <el-option label="待审核" value="wait"></el-option>
  33. <el-option label="审核通过" value="normal"></el-option>
  34. <el-option label="审核失败" value="fail"></el-option>
  35. </el-select>
  36. </el-form-item>
  37. <el-form-item>
  38. <el-button type="primary" @click="search">查询</el-button>
  39. <el-button type="success" @click="addTeacherDialogVisible=true" icon="el-icon-plus" circle></el-button>
  40. </el-form-item>
  41. </el-form>
  42. <el-row>
  43. <el-col >
  44. <el-table
  45. :data="tableData"
  46. style="width: 100%">
  47. <el-table-column
  48. prop="teacherId"
  49. label="教师ID"
  50. width="180">
  51. </el-table-column>
  52. <el-table-column
  53. prop="teacherName"
  54. label="教师姓名"
  55. width="180">
  56. </el-table-column>
  57. <!-- 格式化器 -->
  58. <el-table-column
  59. prop="state"
  60. :formatter="stateFormatter"
  61. label="状态">
  62. </el-table-column>
  63. <el-table-column
  64. prop="email"
  65. label="邮箱">
  66. </el-table-column>
  67. <el-table-column
  68. label="操作">
  69. <template slot-scope='scope'>
  70. <el-button v-if='scope.row.state=="wait"' @click="audit(scope.row,true)" type="text" size="small">审核通过</el-button>
  71. <el-button v-if='scope.row.state=="wait"' @click="audit(scope.row,false)" type="text" size="small">审核失败</el-button>
  72. <el-button v-if='scope.row.state=="normal"' @click="fire(scope.row)" type="text" size="small">开除</el-button>
  73. <el-button v-if='scope.row.state=="normal"' @click="modifyTeacher(scope.row)" type="text" size="small">修改</el-button>
  74. </template>
  75. </el-table-column>
  76. </el-table>
  77. <el-pagination
  78. background
  79. layout="prev, pager, next,sizes"
  80. :total="page.total"
  81. :current-page='page.current'
  82. :page-size='page.size'
  83. @current-change='search'
  84. >
  85. </el-pagination>
  86. </el-col>
  87. </el-row>
  88. </el-main>
  89. </el-container>
  90. <el-dialog title="新增讲师" :visible.sync="addTeacherDialogVisible">
  91. <el-form :model="addTeacherForm">
  92. <el-row>
  93. <el-col :span='15'>
  94. <el-form-item label="讲师姓名" label-width="180px">
  95. <el-input v-model="addTeacherForm.teacherName" autocomplete="off"></el-input>
  96. </el-form-item>
  97. </el-col>
  98. </el-row>
  99. <el-row>
  100. <el-col :span='15'>
  101. <el-form-item label="生日" label-width="180px">
  102. <el-date-picker
  103. v-model="addTeacherForm.birthday"
  104. type="date"
  105. format="yyyy-MM-dd"
  106. value-format="yyyy-MM-dd HH:mm:ss"
  107. placeholder="选择生日">
  108. </el-date-picker>
  109. </el-form-item>
  110. </el-col>
  111. </el-row>
  112. <el-form-item label="email" label-width="180px">
  113. <el-input v-model="addTeacherForm.email" autocomplete="off"></el-input>
  114. </el-form-item>
  115. </el-form>
  116. <div slot="footer" class="dialog-footer">
  117. <el-button @click="addTeacherDialogVisible = false">取 消</el-button>
  118. <el-button type="primary" @click="addTeacher">新增</el-button>
  119. </div>
  120. </el-dialog>
  121. <el-dialog title="修改讲师" :visible.sync="modifyTeacherDialogVisible">
  122. <el-form :model="modifyTeacherForm">
  123. <el-row>
  124. <el-col :span='15'>
  125. <el-form-item label="讲师姓名" label-width="180px">
  126. <el-input v-model="modifyTeacherForm.teacherName" autocomplete="off"></el-input>
  127. </el-form-item>
  128. </el-col>
  129. </el-row>
  130. <el-row>
  131. <el-col :span='15'>
  132. <el-form-item label="生日" label-width="180px">
  133. <el-date-picker
  134. v-model="modifyTeacherForm.birthday"
  135. type="date"
  136. format="yyyy-MM-dd"
  137. value-format="yyyy-MM-dd HH:mm:ss"
  138. placeholder="选择生日">
  139. </el-date-picker>
  140. </el-form-item>
  141. </el-col>
  142. </el-row>
  143. <el-form-item label="email" label-width="180px">
  144. <el-input v-model="modifyTeacherForm.email" autocomplete="off"></el-input>
  145. </el-form-item>
  146. </el-form>
  147. <div slot="footer" class="dialog-footer">
  148. <el-button @click="modifyTeacherDialogVisible = false">取 消</el-button>
  149. <el-button type="primary">修改</el-button>
  150. </div>
  151. </el-dialog>
  152. </div>
  153. </template>
  154. <script>
  155. export default {
  156. name:'About',
  157. data(){return {
  158. page:{
  159. total:0,
  160. current:1,
  161. size:10
  162. },
  163. searchForm:{
  164. teacherName:'',
  165. state:''
  166. },
  167. formLabelWidth:"80px",
  168. modifyTeacherDialogVisible:false,
  169. addTeacherForm: {
  170. teacherName: '',
  171. email:'',
  172. birthday:''
  173. },
  174. modifyTeacherForm: {
  175. teacherId:'',
  176. teacherName: '',
  177. email:'',
  178. birthday:''
  179. },
  180. addTeacherDialogVisible:false,
  181. tableData:[]
  182. }
  183. },
  184. mounted(){
  185. this.search(1);
  186. },
  187. methods:{
  188. modifyTeacher(row){
  189. this.modifyTeacherForm=row;
  190. this.modifyTeacherDialogVisible=true;
  191. },
  192. addTeacher(){
  193. console.log(this.addTeacherForm)
  194. this.$http.post('/addNewTeacher',this.addTeacherForm)
  195. .then(resp=>{
  196. this.$message({message:"新增成功",type:"success"});
  197. this.search(1);
  198. this.addTeacherDialogVisible=false;
  199. }).catch(resp=>{
  200. this.$message({message:"操作失败",type:"warning"});
  201. this.addTeacherDialogVisible=false;
  202. })
  203. },
  204. stateFormatter(row, column, cellValue, index){
  205. switch(cellValue){
  206. case 'wait': return '待审核';
  207. case 'normal': return '审核通过';
  208. case 'fail': return '审核失败';
  209. default : console.error("错误的状态"+cellValue+",无法格式化");
  210. }
  211. },
  212. audit(row,pass){
  213. console.log(row,pass);
  214. this.$http.post('/audit',{"teacherId":row.teacherId,"pass":pass})
  215. .then(resp=>{
  216. this.$message({message:"审核操作完成",type:"success"});
  217. this.search(1);
  218. }).catch(resp=>{
  219. this.$message({message:"操作失败",type:"warning"});
  220. })
  221. },
  222. fire(row){
  223. },
  224. handleClick(row){
  225. console.log(row);
  226. this.dialogFormVisible=true;
  227. // this.$message({message:'你查看成功了',type:'warning'});
  228. },
  229. search(current){
  230. //发请求到后端,搜索数据
  231. let param = this.searchForm;
  232. param.pageIndex=current;
  233. param.pageSize=this.page.size;
  234. this.$http.get('/queryTeacher',{
  235. params:param
  236. })
  237. .then(resp=>{
  238. if(resp.status=200&&resp.data.success){
  239. let data = resp.data.data;
  240. this.tableData=data.records;
  241. //将后端返回的数据绑定到分页条上
  242. this.page.total=data.total;
  243. this.page.current=data.current;
  244. this.page.size=data.size;
  245. }else{
  246. this.$message({
  247. message:'查询失败,'+resp.data.message,
  248. type:'warning'
  249. })
  250. }
  251. })
  252. .catch(error=>{
  253. this.$message({
  254. message:'查询失败,'+error.message,
  255. type:'error'
  256. })
  257. })
  258. }
  259. }
  260. }
  261. </script>

特别说明:
在el-menu上添加router属性,将激活vue-router模式,使用index作为path导航

  1. <el-menu router default-active="1" class="el-menu-demo" mode="horizontal">
  2. <el-menu-item index="/">主页</el-menu-item>
  3. <el-menu-item index="/about">关于</el-menu-item>
  4. <el-menu-item index="/center">个人中心</el-menu-item>

vue56.zip

作业

  1. 在脚手架项目中编写一个课程搜索功能;用户注册功能; element-ui