Blogger Information
Blog 32
fans 0
comment 0
visits 22247
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
vue学习之路(认识vue,挂载点,数据注入,响应式,学习一组指令)
培(信仰)
Original
770 people have browsed it

vue学习之路(认识vue,挂载点,数据注入,响应式,学习一组指令)

认识vue

Vue 是一套用于构建用户界面的渐进式框架,可以自底向上逐层应用。Vue 的核心库只关注视图层,完全能够为复杂的单页应用提供驱动

  1. <h2 class="title">{{words}}</h2>
  2. <!-- 1. 原生 -->
  3. <!-- <script>
  4. document.querySelector(".title").textContent = "hello world";
  5. </script> -->
  6. <!-- 2. jQuery -->
  7. <!-- <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.5.1/jquery.js"></script>
  8. <script>
  9. $(".title").text("hello world...");
  10. </script> -->
  11. <!-- 3. vue -->
  12. <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
  13. <script>
  14. const vm = new Vue({
  15. el:document.querySelector('.title'),
  16. data:{
  17. words: 'hello world~~~',
  18. }
  19. })
  20. //vue 需要在页面上用两个{{}}做挂载点
  21. </script>

vue 不能挂载到html和body上

什么是挂载点,数据注入和响应式

  1. <!-- 创建一个vue根节点 -->
  2. <div class="app">
  3. <!-- 这里的所有内容都可以用vue实例进行管理 -->
  4. <!-- 插值就是一个数据占位符 -->
  5. <!-- <p>用户名:{{插值表达式}}</p> -->
  6. <p>用户名:{{username}}</p>
  7. <!-- 插值表达式可以使用表达式 -->
  8. <p>{{username+', 同学你吃了吗?'}}</p>
  9. <p>10 + 30 = {{10 + 30}}</p>
  10. <!-- 还支持三元表达式 -->
  11. <p>{{flag ? '上午好' : '下午好'}}</p>
  12. </div>
  13. <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
  14. <script>
  15. const vm = new Vue({
  16. //当前vue的配置项
  17. //挂载点
  18. // el: ".app",
  19. el: document.querySelector(".app"),
  20. //数据注入
  21. data: {
  22. username:'tp',
  23. flag: true,
  24. },
  25. });
  26. // 如何拿到data中的数据呢,有时会做其他处理, 在变量前面加$
  27. // console.log(vm.$data.username);
  28. // 在data中声明的所有的变量都自动成为vue实例的属性
  29. // 以上的过程叫数据注入;就是将vm实例中的数据(变量)添加到dom的数据占位符中操作(过程)。
  30. // console.log(vm.username);
  31. // vm.username = 'TJ';
  32. </script>

学习一组指令

v-text,v-once,v-html

  1. <div class="app">
  2. <p>用户名:{{username}}</p>
  3. <!-- v-text在HTML中不存在这样的属性,应该叫自定义属性,
  4. 专门由vue实例管理的 -->
  5. <!-- v-text 等价于 innerText,textContent -->
  6. <!-- <p v-text="username"></p> -->
  7. <!-- 如果只想渲染一次需要使用v-once -->
  8. <!-- <p v-once="username">只渲染一次</p> -->
  9. <!-- v-html 等价于 innerHTML -->
  10. <p v-html="username"></p>
  11. </div>
  12. <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
  13. <script>
  14. const vm = new Vue({
  15. el: document.querySelector(".app"),
  16. data: {
  17. username: "TJ",
  18. },
  19. });
  20. vm.username = '<em style="color:red">xm</em>';
  21. </script>

v-bind,v-on

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8" />
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0" />
  6. <title>v-bind,v-on</title>
  7. <style>
  8. .active {
  9. color: violet;
  10. }
  11. .bigger {
  12. font-size: 2rem;
  13. }
  14. </style>
  15. </head>
  16. <body>
  17. <div class="app" onclick="alert(this.tagName)">
  18. <!-- 一般写法 -->
  19. <p style="color: red">普通行内style:{{site}}</p>
  20. <p v-bind:style="style1">style 表达式:{{site}}</p>
  21. <!-- v-bind:是高频指令,可以简写为 : -->
  22. <p :style="'color:red'">style 字符串:{{site}}</p>
  23. <!-- 推荐使用反引号,便于字符串拼接 可以直接解析变量-->
  24. <p :style="`color:red`">style 反引号:{{site}}</p>
  25. <!-- 绑定类 -->
  26. <!-- 1. 如果没有v-bind指令,表达式只能是字符串 -->
  27. <!-- <p v-bind:class="表达式"></p> -->
  28. <!-- <p :class="`active bigger `">class1:{{site}}</p> -->
  29. <!-- <p :class="class1">类变量(表达式):{{site}}</p>
  30. <p :class="{active: isActive,bigger: isBigger}">
  31. 类变量(优化,使用true,false控制状态):{{site}}
  32. </p>
  33. <p :class="[`active`,`bigger`]">绑定类-支持数组:{{site}}</p>
  34. <p :class="[{active},{bigger}]">绑定类-支持数组内变量:{{site}}</p> -->
  35. <!-- 绑定事件 v-on-->
  36. <p>
  37. <a href="https://php.cn" v-on:click="show">显示网站名称(可以跳转)</a>
  38. </p>
  39. <!-- 阻止a标签的默认跳转行为 -->
  40. <!-- 事件修饰符prevent:阻止元素的默认行为 -->
  41. <!-- v-on:也是高频指令,可以简写为 @ -->
  42. <p>
  43. <a href="https://php.cn" v-on:click.prevent="show"
  44. >显示网站名称(阻止默认跳转)</a
  45. >
  46. </p>
  47. <p>
  48. <a href="https://php.cn" @click.prevent="show"
  49. >显示网站名称(阻止默认跳转-使用v-on简写@)</a
  50. >
  51. </p>
  52. <p>
  53. <a href="https://php.cn" @click.prevent.stop="show"
  54. >显示网站名称(阻止默认跳转-阻止冒泡)</a
  55. >
  56. </p>
  57. <!-- 仅允许执行一次 -->
  58. <p>
  59. <a href="https://php.cn" @click.prevent.stop.once="show"
  60. >显示网站名称(仅一次)</a
  61. >
  62. </p>
  63. <!-- 事件方法的传参 -->
  64. <!-- 事件对象的参数名必须是$event -->
  65. <button @click.stop="handle($event, 100, 200)">click</button>
  66. </div>
  67. <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
  68. <script>
  69. const vm = new Vue({
  70. el: document.querySelector(".app"),
  71. data: {
  72. site: "php",
  73. style1: "color:red",
  74. class1: "active bigger ",
  75. isActive: false,
  76. isBigger: true,
  77. active: "active",
  78. bigger: `bigger`,
  79. },
  80. methods: {
  81. show() {
  82. // this: 就是当前的vue实例
  83. alert(this.site);
  84. },
  85. handle(ev, a, b) {
  86. console.log(ev.type, ev.target);
  87. console.log("a + b = %d", a + b );
  88. console.log(`${a} + ${b} = ${a + b} ` );
  89. },
  90. },
  91. });
  92. </script>
  93. </body>
  94. </html>

v-bind: 简写为 “:” ,绑定元素的属性 :style,:class等
v-on: 简写为 “@”,@click, @input, @change等 ,修饰符 @click.prevent.stop.once

v-model双向绑定

  1. <div class="app">
  2. <p>模型数据:{{site}}</p>
  3. <p>单向绑定(模型数据改变页面数据跟着一起变):{{site}}</p>
  4. <p>
  5. 双向绑定(模型数据改变页面数据跟着一起变,页面数据改变模型数据一起变化):
  6. <input type="text" :value="site" @input="site=$event.target.value" />
  7. </p>
  8. <!-- 使用v-model实现双向绑定,不用书写以上 :value="site" @input="site=$event.target.value" -->
  9. <!-- 双向绑定修饰符 lazyLoad-->
  10. <p>
  11. 双向绑定(模型数据改变页面数据跟着一起变,页面数据改变模型数据一起变化,v-model.lazy):
  12. <input type="text" v-model.lazy = "site" />
  13. </p>
  14. <p>
  15. 双向绑定(模型数据改变页面数据跟着一起变,页面数据改变模型数据一起变化,v-model.number):
  16. <input type="text" v-model.number = "num" />
  17. </p>
  18. <p>{{typeof num}}</p>
  19. </div>
  20. <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
  21. <script>
  22. const vm = new Vue({
  23. el: document.querySelector(".app"),
  24. data: {
  25. site: "PHP",
  26. num: 0,
  27. },
  28. });
  29. </script>

注意v-model修饰符 v-model.lazy,v-model.number

v-for,key

  1. <div class="app">
  2. <ul>
  3. <!-- key:可以干预diff算法 -->
  4. <!-- vue通过稳定且唯一的key值判断这个节点是否需要重新渲染,以提升效率 -->
  5. <!-- 只要用了v-for 就一定要绑定key:不重复的字符串或者整数 -->
  6. <li v-for="(item,index) in items" :key="index">
  7. {{index}}----{{item}}
  8. </li>
  9. </ul>
  10. <ul>
  11. <li v-for="(item,prop,index) in user" :key="prop">
  12. {{prop}}----{{index}}----{{item}}
  13. </li>
  14. </ul>
  15. <ul>
  16. <li v-for="(user,index) in users" :key="user.id">{{user.id}}----{{user.name}}----{{user.email}}</li>
  17. </ul>
  18. <span v-for="(n,i) in 10" :key="i">{{i}}--{{n}}<br></span>
  19. </div>
  20. <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
  21. <script>
  22. const vm = new Vue({
  23. el: ".app",
  24. data: {
  25. // 数组
  26. items: ["合肥", "苏州", "杭州"],
  27. // 对象
  28. user: {
  29. name: "tp",
  30. email: "tp@php.cn",
  31. },
  32. // 对象数组,数据表的查询结果就是一个这样的二维json
  33. users: [
  34. { id: 1, name: "tp", email: "tp@php.cn" },
  35. { id: 2, name: "mj", email: "mj@php.cn" },
  36. { id: 3, name: "xm", email: "xm @php.cn" },
  37. ],
  38. },
  39. });
  40. </script>

注意:使用v-for一定要绑定:key,key要求不重复的字符串或者整数;另外需要注意参数的顺序
数组:v-for=”(item,index) in items” :key=”index”
对象:v-for=”(item,prop,index) in user” :key=”prop”
对象数组:v-for=”(user,index) in users” :key=”user.id”

Correcting teacher:天蓬老师天蓬老师

Correction status:qualified

Teacher's comments:
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post