ToB企服应用市场:ToB评测及商务社交产业平台

标题: Vue 全套教程(二),入门 Vue 必知必会 [打印本页]

作者: 汕尾海湾    时间: 2022-6-24 11:53
标题: Vue 全套教程(二),入门 Vue 必知必会
Vue(二)

链接地址:
Vue 全套教程(一)

文章目录



一、监视

1.1 监视属性


代码示例:
  1. <body>
  2.    
  3.         
  4.         <h2>今天天气很{{info}}</h2>
  5.         
  6.         <button @click="changeWeather">切换天气</button>
  7.    
  8. </body>
复制代码
运行结果:

总结:
1.2 深度监视


代码示例:
  1. [/code] [color=red]注意:[/color]
  2. Vue 中的 watch 默认不监视对象内部值的改变,默认监视的是对象[color=cornflowerblue]地址值[/color],也就是对象内部值发生改变但地址值仍然不会变,会认为这个对象没有发生改变,不会执行回调函数。如果想要监视内部值的变化,必须使用上述的深度监视。
  3. [size=4]1.3 简写形式[/size]
  4. 当不需要使用  immediate 属性以及深度监视时可以采用简写形式,具体写法如下:
  5. [b]第一种方式:[/b]
  6. [code]
复制代码
第二种方式:
  1. [/code] [b]总结:[/b]
  2. [list]
  3. [*] watch 与 computed 对比:
  4. [list]
  5. [*] watch 可以进行[color=orange]异步操作[/color],computed 不可以进行异步操作,如下所示:
  6. [code]watch:{
  7.         firstName(val){
  8.                
  9.                 setTimeout(()=>{
  10.                         console.log(val)
  11.                 },1000);
  12.         }
  13. }
复制代码

  • 函数写法的两个重要原则:

    二、绑定样式

    2.1 字符串写法

    使用 class = "样式名" 可以给标签绑定样式,这个样式是固定的,绑定之后无法修改。
    如果想要绑定的样式并不确定,想要随时修改,那么就需要使用 :class = "变量名" 了,在变量中定义要使用的 class 样式。
    代码示例:
    1. <head>
    2.     <meta charset="UTF-8" />
    3.     <title>绑定class样式</title>
    4.    
    5.    
    6.    
    7.    
    8. </head>
    9. <body>
    10.    
    11.         
    12.         {{name}} <br/><br/>
    13.         
    14.         
    15.         {{name}} <br/><br/>
    16.         
    17.         
    18.         
    19.         {{name}}
    20.    
    21. </body>
    复制代码
    上述代码完成的效果:
    一定会使用基础的 basic 样式,但是另一个样式不确定,通过点击事件随机修改样式,如下图:

    2.2 数组写法

    如果要绑定的是多个不确定(名字、个数都不确定)的样式,则可以使用数组写法。
    代码示例:
    1. <body>
    2.    
    3.         
    4.         {{name}}
    5.    
    6. </body>
    复制代码
    后续只要修改数组中的元素值或个数就可以绑定多个不同的样式了。
    2.3 对象写法

    如果要绑定的样式名称及个数确定,但是不确定哪个使用,则可以使用对象写法。
    代码示例:
    1. <body>
    2.        
    3.                
    4.                 {{name}}
    5.        
    6. </body>
    复制代码
    后续只要修改对象中的布尔值就可以决定采用哪个样式。
    注意:
    绑定 style 样式与上述方式类似,只不过是绑定 :style 属性。
    三、条件渲染

    3.1 v-if

    3.1.1 用法:
    1. v-if = "表达式"
    2. v-else-if = "表达式"
    3. v-else = "表达式"
    复制代码
    当表达式为真时,元素显示。
    代码示例:
    1. <body>
    2.    
    3.         
    4.         Angular1
    5.         
    6.         Angular2
    7.         Angular3
    8.         
    9.         Angular4
    10.    
    11. </body>
    复制代码
    运行结果:

    3.1.2 配合template使用
    如果想要同时显示或隐藏多个元素,可以考虑使用 v-if 和 template 结合使用的方式。
    1. <body>
    2.    
    3.         
    4.         
    5.         <template v-if="1 === 1">
    6.             <h4>你好</h4>
    7.             <h4>故宫</h4>
    8.             <h4>北京</h4>
    9.         </template>
    10.    
    11. </body>
    复制代码
    运行结果:

    3.2 v-show

    用法:v-show = "表达式",表达式可写的内容与 v-if 一致,表达式为真时,元素显示。
    代码示例:
    1. <body>
    2.    
    3.         周杰伦
    4.    
    5. </body>
    复制代码
    运行结果:

    注意:
    四 、列表渲染

    4.1 基本使用

    作用:v-for 指令用来遍历数据,需要结合 key 属性一起使用
    基本语法:v-for="(item,index) of 被遍历的内容" 或者 v-for="(item,index) in 被遍历的内容",其中 item 表示每次遍历的结果,index 表示遍历的索引值(从0开始,自动生成)
    代码示例:
    1.    
    2.     <h2>人员列表(遍历数组)</h2>
    3.     <ul>
    4.         
    5.         <li v-for="(item,index) of persons" :key="index">
    6.             
    7.             {{item.name}}-{{item.age}}
    8.         </li>
    9.     </ul>
    10.    
    11.     <h2>汽车信息(遍历对象)</h2>
    12.     <ul>
    13.         
    14.         <li v-for="(value,key) of car" :key="key">
    15.             {{key}}-{{value}}
    16.         </li>
    17.     </ul>
    18.    
    19.     <h2>测试遍历字符串</h2>
    20.     <ul>
    21.         <li v-for="(char,index) of str" :key="index">
    22.             {{char}}-{{index}}
    23.         </li>
    24.     </ul>
    25.    
    26.    
    27.     <h2>测试遍历指定次数</h2>
    28.     <ul>
    29.         <li v-for="(number,index) of 5" :key="index">
    30.             {{index}}-{{number}}
    31.         </li>
    32.     </ul>
    复制代码
    运行结果1:

    运行结果2:

    注意:
    4.2 key的原理

    首先观察一种情况:
    1.    
    2.     <button @click.once="add">添加一个老刘</button>
    3.     <ul>
    4.         
    5.         <li v-for="(p,index) of persons" :key="index">
    6.             
    7.             {{p.name}}-{{p.age}} <input type="text">
    8.         </li>
    9.     </ul>
    复制代码
    运行结果:

    key的原理:(配合下列图示理解)

    key的原理图示如下:
    1. 以索引作为key属性值:

    2. 以自定义id作为key属性值:

    注意:
    4.3 列表过滤

    4.3.1 filter()方法介绍

    介绍:
    filter() 方法用来对数组进行过滤,这个方法会创建一个新的数组,新的数组元素是原数组中通过筛选后的元素。
    示例:
    1. //返回数组nums中所有大于5的元素
    2. let nums = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
    3. //res用来接收一个新数组
    4. //num表示遍历原数组得到的每一个元素
    5. let res = nums.filter((num) => {
    6.   //如果返回值为true,则该元素被保留
    7.   return num > 5;
    8. });
    9. console.log(res);  // [6, 7, 8, 9, 10]
    10. console.log(nums);  //[1, 2, 3, 4, 5, 6, 7, 8, 9, 10],原数组并未改变
    复制代码
    总结:
    filter() 方法中还需要定义一个函数,数组中的每个元素都会执行这个函数,函数的参数表示原数组的每一个元素,如果这个函数的返回值为 true,则该元素被保留。
    4.3.2 watch方式

    首先需要明确任何字符串都包含空串,如下图:

    列表过滤概念:

    代码实现:
    1.    
    2.     <input type="text" placeholder="请输入名字" v-model="keyWord">
    3.     <ul>
    4.         
    5.         <li v-for="(p,index) of filPerons" :key="index">
    6.             {{p.name}}-{{p.age}}-{{p.sex}}
    7.         </li>
    8.     </ul>
    复制代码
    注意:
    如果监视属性中没有编写 immediate:true,则一开始列表是空的,因为页面遍历的是经过过滤的数组,一开始这个数组是空的,所以列表为空。
    加上 immediate:true 属性之后,初始化时就直接调用 handler 函数,参数 val 的值为空字符,由于任何字符串都包含空串,所以原数组的所有元素都会被保留。
    4.3.3 computed方式

    1.     <input type="text" placeholder="请输入名字" v-model="keyWord">
    2.     <ul>
    3.         <li v-for="(p,index) of filPersons" :key="index">
    4.             {{p.name}}-{{p.age}}-{{p.sex}}
    5.         </li>
    6.     </ul>
    复制代码
    filPerons 依赖 keyWord,当 keyWord 发生变化,就会执行函数获取新值。
    4.4 列表排序

    sort() 函数:
    用于对数组排序,默认是按照编码顺序排序(修改的是原数组)
    1. var arr=[102,103,506,403,89]
    2. //默认按照编码顺序排序
    3. //负数中,越小的数编码值越大
    4. //根据数字第一个数字大小进行排序
    5. //根据字符的字典顺序排序
    6. console.log(arr.sort()); //102 103 403 506 89
    7. //从小到大排序
    8. //a或b表示数组中的某一项
    9. arr.sort((a,b) => {
    10.         return a-b;
    11. });
    12. //从大到小排序
    13. arr.sort((a,b) => {
    14.         return b-a;
    15. });
    复制代码
    列表排序概念:

    代码实现:
    1.     <h2>人员列表</h2>
    2.     <input type="text" placeholder="请输入名字" v-model="keyWord">
    3.     <button @click="sortType = 2">年龄升序</button>
    4.     <button @click="sortType = 1">年龄降序</button>
    5.     <button @click="sortType = 0">原顺序</button>
    6.     <li v-for="(p,index) of filPerons" :key="p.id">
    7.         {{p.name}}-{{p.age}}-{{p.sex}}
    8.     </li>
    复制代码
    免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!




    欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4