什么是VUE

Vue 是一套用于构建用户界面的渐进式JavaScript框架,简化dom操作。
基于MVVM 是Model-View-ViewModel 的缩写,它是一种基于前端开发的架构模式,其核心是提供对View 和 ViewModel 的双向数据绑定,这使得ViewModel 的状态改变可以自动传递给 View,即所谓的数据双向绑定.
简单可以总结:
VUE是一套前端框架,免除了原生JavaScript中的DOM操作,简化书写
VUE基于MVVM(Model-View_ViewModel)思想,实现数据双向绑定
Vue官网:https://cn.vuejs.org/

演变过程

01.html+js+css(2007)
02.EasyUI+JQuery (2013)
03.node.js + vue(React,Angular)+ElementUI(iview,antDesign)(2018)

什么是MVVM

MVC:
MVC是一种设计模式:
M(Model):模型层。是应用程序中用于处理应用程序数据逻辑的部分,模型对象负责在数据库中存取数据;
V(View):视图层。是应用程序中处理数据显示的部分,视图是依据模型数据创建的;
C(Controller):控制层。是应用程序中处理用户交互的部分,控制器接受用户的输入并调用模型和视图去完成用户的需求,控制器本身不输出任何东西和做任何处理。它只是接收请求并决定调用哪个模型构件去处理请求,然后再确定用哪个视图来显示返回的数据。


MVVM:
Vue框架中MVVM的M就是后端的数据,V就是节点树,VM就是new出来的那个Vue({})对象
M(Model):模型层。就是业务逻辑相关的数据对象,通常从数据库映射而来,我们可以说是与数据库对应的model。
V(View):视图层。就是展现出来的用户界面。
VM(ViewModel):视图模型层。连接view和model的桥梁。因为,Model层中的数据往往是不能直接跟View中的控件一一对应上的,所以,需要再定义一个数据对象专门对应view上的控件。而ViewModel的职责就是把model对象封装成可以显示和接受输入的界面数据对象。
MVVM与MVC最大区别:
MVVM与MVC的最大区别就是:它实现了View和Model的自动同步,也就是当Model的数据改变时,我们不用再自己手动操作Dom元素,来改变View的显示,而是改变数据后该数据对应View层显示会自动改变。
image.png

VUE快速入门

1、新建HTML页面,引入Vue.js文件
](https://cdn.bootcss.com/vue/2.5.16/vue.min.js">)
2、在JS代码区域,创建VUE核心对象,进行数据绑定

  1. new Vue({
  2. el:"#app",
  3. data(){
  4. return{
  5. username:"mayikt"
  6. }
  7. }
  8. });

3、编写视图

  1. <div id = "app">
  2. <input type="text" name="username" v-model="username">
  3. {{username}}
  4. </div>

4、效果演示
image.png

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>vue-demo01</title>
  6. </head>
  7. <body>
  8. <div id="app">
  9. <input type="text" name="username" v-model="username">
  10. <!-- 插值表达式 -->
  11. {{username}}
  12. </div>
  13. <script src="https://cdn.bootcss.com/vue/2.5.16/vue.min.js"></script>
  14. <script>
  15. // 1.创建vue核心对象
  16. new Vue({
  17. el: "#app",
  18. data() {
  19. return {
  20. username: "mayikt"
  21. }
  22. }
  23. });
  24. </script>
  25. </body>
  26. </html>

VUE常用指令

Vue指令是带有v-前缀的特殊属性,它们作用于HTML元素,表示它们是Vue提供的特殊属性。将指令绑定在元素上时,指令会为绑定的目标元素添加一些特殊的行为
v-if指令:条件性的渲染某元素,判定为true时渲染,否则不渲染
v-else指令:条件性的渲染某元素,判定为true时渲染,否则不渲染
v-show指令:条件渲染指令,根据表达式的真假删除和插入元素
v-for指令:列表渲染,遍历容器的元素或者对象的属性
v-bind指令:为HTML标签绑定属性值,如设置 href , css样式等
v-on指令 :为HTML标签绑定事件
v-model指令:在表单元素上创建双向数据绑定

v-bind指令

v-bind指令:为HTML标签绑定属性值,如设置 href , css样式等
相关例子:

  1. <div id="app">
  2. <a v-bind:href="url">点击跳转www.mayikt.com</a>
  3. <a :href="url">简写点击跳转www.mayikt.com</a>
  4. </div>
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>vue-demo01</title>
  6. </head>
  7. <body>
  8. <div id="app">
  9. <a v-bind:href="url">点击跳转www.mayikt.com</a>
  10. <a :href="url">简写点击跳转www.mayikt.com</a>
  11. </div>
  12. <script src="https://cdn.bootcss.com/vue/2.5.16/vue.min.js"></script>
  13. <script>
  14. // 1.创建vue核心对象
  15. new Vue({
  16. el: "#app",
  17. data() {
  18. return {
  19. username: "mayikt",
  20. url: "http://www.mayikt.com"
  21. }
  22. }
  23. });
  24. </script>
  25. </body>
  26. </html>

v-model指令

v-model指令:在表单元素上创建双向数据绑定

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>vue-demo01</title>
  6. </head>
  7. <body>
  8. <div id="app">
  9. <a v-bind:href="url">点击跳转www.mayikt.com</a>
  10. <a :href="url">简写点击跳转www.mayikt.com</a>
  11. <input type="text" v-model="username">
  12. {{username}}
  13. </div>
  14. <script src="https://cdn.bootcss.com/vue/2.5.16/vue.min.js"></script>
  15. <script>
  16. // 1.创建vue核心对象
  17. new Vue({
  18. el: "#app",
  19. data() {
  20. return {
  21. username: "mayikt",
  22. url: "http://www.mayikt.com"
  23. }
  24. }
  25. });
  26. </script>
  27. </body>
  28. </html>

v-on指令

为HTML标签绑定事件

  1. <div id="app">
  2. <input type="button" value="点击我" v-on:click="mayiktShow()">
  3. <input type="button" value="点击我" @click="mayiktShow()">
  4. </div>
  5. <script src="https://cdn.bootcss.com/vue/2.5.16/vue.min.js"></script>
  6. <script>
  7. // 1.创建vue核心对象
  8. new Vue({
  9. el: "#app",
  10. data() {
  11. return {
  12. username: "mayikt",
  13. url: "http://www.mayikt.com"
  14. }
  15. },
  16. methods: {
  17. mayiktShow() {
  18. alert("我是mayikt");
  19. }
  20. }
  21. });
  22. </script>

单击事件 : 事件属性名是 onclick,而在vue中使用是 v-on:click
失去焦点事件:事件属性名是 onblur,而在vue中使用时 v-on:blur

v-if指令

v-if指令:条件性的渲染某元素,判定为true时渲染,否则不渲染
v-else指令:条件性的渲染某元素,判定为true时渲染,否则不渲染
v-show指令:条件渲染指令,根据表达式的真假删除和插入元素 根据条件展示某元素,区别在于切换的是display属性的值

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>vue-demo01</title>
  6. </head>
  7. <body>
  8. <div id="app">
  9. <div v-if="state==1">
  10. div1成功显示
  11. </div>
  12. <div v-else>
  13. 其他div成功显示
  14. </div>
  15. <input type="text" v-model="state">
  16. <div v-show="showState==2">显示 show div</div>
  17. </div>
  18. <script src="https://cdn.bootcss.com/vue/2.5.16/vue.min.js"></script>
  19. <script>
  20. // 1.创建vue核心对象
  21. new Vue({
  22. el: "#app",
  23. data() {
  24. return {
  25. username: "mayikt",
  26. url: "http://www.mayikt.com",
  27. state: 1,
  28. showState:3
  29. }
  30. },
  31. methods: {
  32. mayiktShow() {
  33. alert("我是mayikt");
  34. },
  35. mayiktShow2() {
  36. alert("我是meite");
  37. }
  38. }
  39. });
  40. </script>
  41. </body>
  42. </html>

v-for指令

列表渲染,遍历容器的元素或者对象的属性

  1. <标签 v-for="变量名 in 集合模型数据">
  2. {{变量名}}
  3. </标签>
  1. <div id="app">
  2. <div v-for="name in arrays">
  3. <li>{{name}}</li>
  4. </div>
  5. </div>

加上索引

  1. <div id="app">
  2. <div v-for="(name,i) in arrays">
  3. <li>{{i}}:{{name}}</li>
  4. </div>
  5. </div>
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>vue-demo01</title>
  6. </head>
  7. <body>
  8. <div id="app">
  9. <div v-for="(name,i) in arrays">
  10. <li>{{i}}:{{name}}</li>
  11. </div>
  12. </div>
  13. <script src="https://cdn.bootcss.com/vue/2.5.16/vue.min.js"></script>
  14. <script>
  15. // 1.创建vue核心对象
  16. new Vue({
  17. el: "#app",
  18. data() {
  19. return {
  20. arrays: ["mayikt", "meite", "wangmazi"]
  21. }
  22. }
  23. });
  24. </script>
  25. </body>
  26. </html>

vue整合ssm开发学生系统

index.html首页整合vue

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1">
  6. <title>开始使用 layui</title>
  7. <link rel="stylesheet" type="text/css" href="https://www.layuicdn.com/layui-v2.5.6/css/layui.css"/>
  8. <script src="https://cdn.bootcss.com/vue/2.5.16/vue.min.js"></script>
  9. <script src="https://unpkg.com/axios/dist/axios.min.js"></script>
  10. </head>
  11. <body>
  12. <div id="app">
  13. <table class="layui-table">
  14. <colgroup>
  15. <col width="150">
  16. <col width="200">
  17. <col>
  18. </colgroup>
  19. <thead>
  20. <tr>
  21. <th>学生ID</th>
  22. <th>学生名称</th>
  23. <th>学生年龄</th>
  24. <th>学生地址</th>
  25. <th>操作</th>
  26. </tr>
  27. </thead>
  28. <tbody>
  29. <tr v-for="user in users">
  30. <th>{{user.id}}</th>
  31. <th>{{user.name}}</th>
  32. <th>{{user.age}}</th>
  33. <th>{{user.addres}}</th>
  34. <th>操作</th>
  35. </tr>
  36. </tbody>
  37. </table>
  38. </div>
  39. <script>
  40. new Vue({
  41. el: "#app",
  42. data() {
  43. return {
  44. users: []
  45. }
  46. },
  47. mounted() {
  48. // 页面加载完成之后 加载数据
  49. var _this = this;
  50. axios({
  51. // 请求方式
  52. method: 'GET',
  53. // 请求的地址
  54. url: 'http://127.0.0.1/user/getUsersAll',
  55. }).then(function (result) {
  56. var code = result.data.code;
  57. var data = result.data.data;
  58. if (code == "200") {
  59. _this.users = data;
  60. }
  61. })
  62. }
  63. });
  64. </script>
  65. </body>
  66. </html>

新增数据整合vue

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>新增用户数据</title>
  6. <!-- 引入layui css -->
  7. <link rel="stylesheet" type="text/css" href="https://www.layuicdn.com/layui-v2.5.6/css/layui.css"/>
  8. <script src="https://cdn.bootcss.com/vue/2.5.16/vue.min.js"></script>
  9. <script src="https://unpkg.com/axios/dist/axios.min.js"></script>
  10. </head>
  11. <body>
  12. <div id="app">
  13. <form class="layui-form" action="">
  14. <div class="layui-form-item">
  15. <label class="layui-form-label">用户名称</label>
  16. <div class="layui-input-block">
  17. <input type="text" name="name" v-model="user.name" required lay-verify="required" placeholder="请输入用户名称"
  18. autocomplete="off"
  19. class="layui-input">
  20. </div>
  21. </div>
  22. <div class="layui-form-item">
  23. <label class="layui-form-label">用户年龄</label>
  24. <div class="layui-input-block">
  25. <input type="text" name="age" v-model="user.age" required lay-verify="required" placeholder="请输入用户年龄"
  26. autocomplete="off"
  27. class="layui-input">
  28. </div>
  29. </div>
  30. <div class="layui-form-item layui-form-text">
  31. <label class="layui-form-label">用户地址</label>
  32. <div class="layui-input-block">
  33. <textarea name="addres" v-model="user.addres" placeholder="请输入地址" class="layui-textarea"></textarea>
  34. </div>
  35. </div>
  36. <div class="layui-form-item">
  37. <div class="layui-input-block">
  38. <input type="button" class="layui-btn" @click="suAddUser()" value="立即提交">
  39. <button type="reset" class="layui-btn layui-btn-primary">重置</button>
  40. </div>
  41. </div>
  42. </form>
  43. </div>
  44. <script>
  45. new Vue({
  46. el: "#app",
  47. data() {
  48. return {
  49. user: {}
  50. }
  51. },
  52. methods: {
  53. suAddUser() {
  54. alert("点击提交" + this.user.name + "," + this.user.name);
  55. var _this = this;
  56. axios({
  57. method: "POST",
  58. url: "http://127.0.0.1/user/insertUser/",
  59. data: _this.user,
  60. headers: {
  61. 'Content-Type': 'application/json;charset=UTF-8'
  62. }
  63. }).then(resp => {
  64. var code = resp.data.code;
  65. if (code == "200") {
  66. alert("新增数据成功");
  67. window.location.href = "vueIndex.html";
  68. } else {
  69. alert("新增数据失败");
  70. }
  71. })
  72. }
  73. }
  74. })
  75. </script>
  76. </body>
  77. </html>

修改数据整合vue

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>修改用户数据</title>
  6. <link rel="stylesheet" type="text/css" href="https://www.layuicdn.com/layui-v2.5.6/css/layui.css"/>
  7. <script src="https://cdn.bootcss.com/vue/2.5.16/vue.min.js"></script>
  8. <script src="https://unpkg.com/axios/dist/axios.min.js"></script>
  9. </head>
  10. <body>
  11. <div id="app">
  12. <form class="layui-form" action="">
  13. <div class="layui-form-item">
  14. <label class="layui-form-label">用户ID</label>
  15. <div class="layui-input-block">
  16. <input type="text" name="id" v-model="user.id" id="id" required lay-verify="required"
  17. autocomplete="off"
  18. class="layui-input">
  19. </div>
  20. </div>
  21. <div class="layui-form-item">
  22. <label class="layui-form-label">用户名称</label>
  23. <div class="layui-input-block">
  24. <input type="text" name="name" v-model="user.name" id="name" required lay-verify="required"
  25. placeholder="请输入用户名称"
  26. autocomplete="off"
  27. class="layui-input">
  28. </div>
  29. </div>
  30. <div class="layui-form-item">
  31. <label class="layui-form-label">用户年龄</label>
  32. <div class="layui-input-block">
  33. <input type="text" name="age" v-model="user.age" id="age" required lay-verify="required"
  34. placeholder="请输入用户年龄"
  35. autocomplete="off"
  36. class="layui-input">
  37. </div>
  38. </div>
  39. <div class="layui-form-item layui-form-text">
  40. <label class="layui-form-label">用户地址</label>
  41. <div class="layui-input-block">
  42. <textarea name="addres" v-model="user.addres" id="addres" placeholder="请输入地址"
  43. class="layui-textarea"></textarea>
  44. </div>
  45. </div>
  46. <div class="layui-form-item">
  47. <div class="layui-input-block">
  48. <input type="button" class="layui-btn" @click="updateUser()" value="立即修改">
  49. <button type="reset" class="layui-btn layui-btn-primary">重置</button>
  50. </div>
  51. </div>
  52. </form>
  53. </div>
  54. <script>
  55. function getUrlParam(name) {
  56. var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)"); //构造一个含有目标参数的正则表达式对象
  57. var r = window.location.search.substr(1).match(reg); //匹配目标参数
  58. if (r != null)
  59. return unescape(r[2]);
  60. return null; //返回参数值
  61. }
  62. new Vue({
  63. el: "#app",
  64. data() {
  65. return {
  66. user: {}
  67. }
  68. },
  69. methods: {
  70. updateUser() {
  71. alert("修改用户数据");
  72. var _this = this;
  73. axios({
  74. method: "PUT",
  75. url: "http://127.0.0.1/user/updateUser/",
  76. data: _this.user,
  77. headers: {
  78. 'Content-Type': 'application/json;charset=UTF-8'
  79. }
  80. }).then(resp => {
  81. var code = resp.data.code;
  82. if (code == "200") {
  83. alert("修改数据成功");
  84. window.location.href = "vueIndex.html";
  85. } else {
  86. alert("修改数据失败");
  87. }
  88. })
  89. }
  90. },
  91. mounted() {
  92. //1.获取地址栏参数
  93. var id = getUrlParam("id");
  94. //2.发送ajax请求
  95. var _this = this;
  96. axios({
  97. // 请求方式
  98. method: 'get',
  99. // 请求的地址
  100. url: 'http://127.0.0.1/user/getById/' + id,
  101. }).then(function (result) {
  102. var code = result.data.code;
  103. if (code == "200") {
  104. _this.user = result.data.data;
  105. } else {
  106. alert("查询用户信息数据失败!");
  107. }
  108. })
  109. }
  110. })
  111. </script>
  112. </body>
  113. </html>

删除数据整合vue

  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1">
  6. <title>开始使用 layui</title>
  7. <!-- 引入layui css -->
  8. <link rel="stylesheet" type="text/css" href="https://www.layuicdn.com/layui-v2.5.6/css/layui.css"/>
  9. <!--引入vue.js -->
  10. <script src="https://cdn.bootcss.com/vue/2.5.16/vue.min.js"></script>
  11. <script src="https://unpkg.com/axios/dist/axios.min.js"></script>
  12. </head>
  13. <body>
  14. <a href="vueAddUser.html">新增数据</a>
  15. <div id="app">
  16. <table class="layui-table">
  17. <colgroup>
  18. <col width="150">
  19. <col width="200">
  20. <col>
  21. </colgroup>
  22. <thead>
  23. <tr>
  24. <th>学生ID</th>
  25. <th>学生名称</th>
  26. <th>学生年龄</th>
  27. <th>学生地址</th>
  28. <th>操作</th>
  29. </tr>
  30. </thead>
  31. <tbody>
  32. <tr v-for="(user,i) in users">
  33. <td>{{user.id}}</td>
  34. <td>{{user.name}}</td>
  35. <td>{{user.age}}</td>
  36. <td>{{user.addres}}</td>
  37. <td><a href="#" @click="delUser(i,user.id)">删除</a>&nbsp;&nbsp;<a
  38. :href="'vueUpdateUser.html?id='+user.id">修改</a></td>
  39. </tr>
  40. </tbody>
  41. </table>
  42. </div>
  43. <script>
  44. /**
  45. * 页面加载完毕之后开始发送ajax请求
  46. */
  47. new Vue({
  48. el: "#app",
  49. data() {
  50. return {
  51. users: []
  52. }
  53. },
  54. methods: {
  55. delUser(index, id) {
  56. alert(index + "," + id);
  57. //id根据id 调用到后端接口
  58. var _this = this;
  59. axios({
  60. // 请求方式
  61. method: 'delete',
  62. // 请求的地址
  63. url: 'http://127.0.0.1/user/deleteById/' + id,
  64. }).then(function (result) {
  65. var code = result.data.code;
  66. if (code == "200") {
  67. // 如果code值是为200 后端数据就删除成功
  68. //前端技术将该行数据删除
  69. alert("删除成功");
  70. _this.users.splice(index, 1);
  71. }
  72. })
  73. }
  74. },
  75. mounted() {
  76. // 页面加载完成之后处理;
  77. // 发送ajax获取
  78. var _this = this;
  79. axios({
  80. // 请求方式
  81. method: 'GET',
  82. // 请求的地址
  83. url: 'http://127.0.0.1/user/getUsersAll',
  84. }).then(function (result) {
  85. var code = result.data.code;
  86. var data = result.data.data;
  87. if (code == "200") {
  88. // 返回200 后端接口中响应 data数据 给users
  89. _this.users = data;
  90. }
  91. })
  92. }
  93. });
  94. </script>
  95. </body>
  96. </html>