vue学习笔记(三)--来源尚硅谷《监视属性、绑定样式、条件渲染、列表渲染》


九、监视属性

9.1、天气案例

点击查看代码


	
		
		天气案例
		
		
	
	
		
		

今天天气很{{info}}

9.2、天气案例_监视属性

监视属性watch:
1.当被监视的属性变化时, 回调函数自动调用, 进行相关操作
2.监视的属性必须存在,才能进行监视!!
3.监视的两种写法:
(1).new Vue时传入watch配置
(2).通过vm.$watch监视

点击查看代码
	
		
		

今天天气很{{info}}

9.3、天气案例_深度监视

深度监视:
(1).Vue中的watch默认不监测对象内部值的改变(仅一层)。
(2).配置deep:true可以监测对象内部值改变(多层)。
备注:
(1).Vue自身可以监测对象内部值的改变,但Vue提供的watch默认不可以!
(2).使用watch时根据数据的具体结构,决定是否采用深度监视。

点击查看代码
	
		
		

今天天气很{{info}}


a的值是:{{numbers.a}}

b的值是:{{numbers.b}}

{{numbers.c.d.e}}

9.4、天气案例_监视属性—简写

点击查看代码
	
		
		

今天天气很{{info}}

9.5、天气案例_watch实现

computed和watch之间的区别:
1.computed能完成的功能,watch都可以完成。
2.watch能完成的功能,computed不一定能完成,例如:watch可以进行异步操作
两个重要的小原则:
1.所被Vue管理的函数,最好写成普通函数,这样this的指向才是vm 或 组件实例对象。
2.所有不被Vue所管理的函数(定时器的回调函数、ajax的回调函数等、Promise的回调函数),最好写成箭头函数
这样this的指向才是vm 或 组件实例对象。

点击查看代码
	
		
		
姓:

名:

全名:{{fullName}}

十、绑定样式

绑定样式: 1. class样式 写法:class="xxx" xxx可以是字符串、对象、数组。 字符串写法适用于:类名不确定,要动态获取。 对象写法适用于:要绑定多个样式,个数不确定,名字也不确定。 数组写法适用于:要绑定多个样式,个数确定,名字也确定,但不确定用不用。 2. style样式 :style="{fontSize: xxx}"其中xxx是动态值。 :style="[a,b]"其中a、b是样式对象。
点击查看代码


	
		
		绑定样式
		
		
	
	
		
		
{{name}}


{{name}}


{{name}}


{{name}}


{{name}}

十一、条件渲染

条件渲染: **1.v-if** 写法: (1).v-if="表达式" (2).v-else-if="表达式" (3).v-else="表达式" 适用于:切换频率较低的场景。 特点:不展示的DOM元素直接被移除。 注意:v-if可以和:v-else-if、v-else一起使用,但要求结构不能被“打断”。

2.v-show
写法:v-show="表达式"
适用于:切换频率较高的场景。
特点:不展示的DOM元素未被移除,仅仅是使用样式隐藏掉

3.备注:使用v-if的时,元素可能无法获取到,而使用v-show一定可以获取到。

点击查看代码


	
		
		条件渲染
		
	
	
		
		

当前的n值是:{{n}}

十二、列表渲染

12.1、基本列表

v-for指令: 1.用于展示列表数据 2.语法:v-for="(item, index) in xxx" :key="yyy" 3.可遍历:数组、对象、字符串(用的很少)、指定次数(用的很少)
点击查看代码
	
		
		

人员列表(遍历数组)

  • {{p.name}}-{{p.age}}

汽车信息(遍历对象)

  • {{k}}-{{value}}

测试遍历字符串(用得少)

  • {{char}}-{{index}}

测试遍历指定次数(用得少)

  • {{index}}-{{number}}

12.2、key的原理

面试题:react、vue中的key有什么作用?(key的内部原理)

  1. 虚拟DOM中key的作用:
    key是虚拟DOM对象的标识,当数据发生变化时,Vue会根据【新数据】生成【新的虚拟DOM】,
    随后Vue进行【新虚拟DOM】与【旧虚拟DOM】的差异比较,比较规则如下:
    2.对比规则:
    (1).旧虚拟DOM中找到了与新虚拟DOM相同的key:
    ①.若虚拟DOM中内容没变, 直接使用之前的真实DOM!
    ②.若虚拟DOM中内容变了, 则生成新的真实DOM,随后替换掉页面中之前的真实DOM。
    (2).旧虚拟DOM中未找到与新虚拟DOM相同的key
    创建新的真实DOM,随后渲染到到页面。
  2. 用index作为key可能会引发的问题:
  3. 若对数据进行:逆序添加、逆序删除等破坏顺序操作:
    会产生没有必要的真实DOM更新 ==> 界面效果没问题, 但效率低。
  4. 如果结构中还包含输入类的DOM:
    会产生错误DOM更新 ==> 界面有问题。
  5. 开发中如何选择key?:
    1.最好使用每条数据的唯一标识作为key, 比如id、手机号、身份证号、学号等唯一值。
    2.如果不存在对数据的逆序添加、逆序删除等破坏顺序操作,仅用于渲染列表用于展示,使用index作为key是没有问题的。

12.3、列表过滤

点击查看代码
	
		
		

人员列表

  • {{p.name}}-{{p.age}}-{{p.sex}}

12.4、列表排序

点击查看代码
	
		
		

人员列表

  • {{p.name}}-{{p.age}}-{{p.sex}}

12.5、更新时的一个问题

点击查看代码
	
		
		

人员列表

  • {{p.name}}-{{p.age}}-{{p.sex}}
>

12.6、Vue监测数据改变的原理

点击查看代码
	
		
		

学校名称:{{name}}

学校地址:{{address}}

12.7、模拟一个数据监测

点击查看代码
	
		

12.8、Vue.set的使用

点击查看代码
	
		
		

学校信息

学校名称:{{school.name}}

学校地址:{{school.address}}

校长是:{{school.leader}}


学生信息

姓名:{{student.name}}

性别:{{student.sex}}

年龄:真实{{student.age.rAge}},对外{{student.age.sAge}}

朋友们

  • {{f.name}}--{{f.age}}

12.9、Vue监测数据改变的原理_数组

点击查看代码
	
		
		

学校信息

学校名称:{{school.name}}

学校地址:{{school.address}}

校长是:{{school.leader}}


学生信息

姓名:{{student.name}}

性别:{{student.sex}}

年龄:真实{{student.age.rAge}},对外{{student.age.sAge}}

爱好

  • {{h}}

朋友们

  • {{f.name}}--{{f.age}}

12.10、总结数据监视

Vue监视数据的原理: 1. vue会监视data中所有层次的数据。 2. 如何监测对象中的数据? 通过setter实现监视,且要在new Vue时就传入要监测的数据。 (1).对象中后追加的属性,Vue默认不做响应式处理 (2).如需给后添加的属性做响应式,请使用如下API: Vue.set(target,propertyName/index,value) 或 vm.$set(target,propertyName/index,value) 3. 如何监测数组中的数据? 通过包裹数组更新元素的方法实现,本质就是做了两件事: (1).调用原生对应的方法对数组进行更新。 (2).重新解析模板,进而更新页面。 4.在Vue修改数组中的某个元素一定要用如下方法: 1.使用这些API:push()、pop()、shift()、unshift()、splice()、sort()、reverse() 2.Vue.set() 或 vm.$set() 特别注意:Vue.set() 和 vm.$set() 不能给vm 或 vm的根数据对象 添加属性!!!
点击查看代码
	
		
		

学生信息









姓名:{{student.name}}

年龄:{{student.age}}

性别:{{student.sex}}

爱好:

  • {{h}}

朋友们:

  • {{f.name}}--{{f.age}}
vue