00:00
好嘞,各位,那在这一小节呢,我们去讲一下监视里的一个扩展点啊,叫深度监视啊,这么写的这词儿啊,深度啊说老师这什么意思呢,一个案例啊,你就懂了,把这二呢复制一下,改个名啊叫三,然后后边呢也改一下。深度监视名字复制过来粘贴,把之前写的总结呢给它删掉啊,然后我再往下看看需要改什么啊呃,那这样我不用这种方式呢去监视了,我用这种方式直接写配置项这种啊,然后呢,我把这个immediate也给它注掉,省得一会儿呢它干扰我们,然后在这个A字hot的下方呢,我写个逗号,敲个回车,A字hot折叠起来,不再看了啊,监视A字hot的逻辑已经写完了,那接下来呢,我这样做啊,把这计算属性和methods都折叠起来,我给你配置点新的数据,叫做numbers,什么意思呢?就是一堆数字,好,它是一个对象,里面有AB啊,初始值是一呢,同理也是一,然后呢,我想在页面上展示这个A,我先不展示这个B啊,先展示这个A好了,走,那写一个分隔线吧,对吧,做个分隔在这呢,写一个H3啊叫做A的值。
01:19
这然后我得用一个差值语法对吧?请问我直接写A行吗?不可以啊各位,因为你的数据里面没有A,有numbers numbers里边有A,所以说你这呢必须得写上number4.a,然后下边呢,还有一个按钮啊,这个按钮呢有什么功能啊,我写完你就知道了,叫做点我让A加加啊,或者加一吧,是吧?那你说这个逻辑怎么写,艾符click点击时间对吧?你当然要可以给它配一个方法叫做I,然后里边呢写上this.numbers.a加加对吧?但是这个逻辑比较简单,那我就直接写在这了,对吧?之前聊过numbers.a加加是不是就可以了,右键打开瞧一下效果啊。
02:01
A1走走走对吧,没问题,接下来提出我的需求啊,我呢想让你监测到这个A的变化。你注意听我说啊,控制台打开,我只让你监测A,我没让你监测B,明白不啊,只监测A不监测B,请问怎么写?回到这,说老师呢,简单,原来怎么监测it hot,那我这回就怎么监测A呗,老师我就直接写了啊A配置项,然后呢,写好你这个handle德ler啊,然后呢,只要A1改啊老师我就输出改变了,好,老师这不就写完了吗?那你看看你这么写行不行吧?各位啊,回到页面呢,我们看一下打开控制台,然后呢,我开始点了啊走走走,A已经变了,但是它是不是没有监测到,为什么呢?很简单啊各位,你这么写就属于监测了一个不存在的属性,说老师存在A,这不在这儿呢吗?错,存在的属性是is hot,存在的属性是numbers,存在的一个计算属性是info,但是就不存在你所写的这A,哎呀,老师这怎么办呀?
03:03
有些同学可能想了,老师知道了,把numbers写在这儿,这不就结了吗?各位啊,你考虑一个问题,就假设你这么写行啊,我说的是假设啊,假设你这么写行,你的意思监监视谁呀?是不是监视numbers?那你的意思就是A变也算,B变了是不是也算呢?但是我现在不想让你监测B呀,所以说你这么写呀,它是不可以的,哎呀,老师那咋办,写不下去了呀,同学你是不得拿到那个A呀,直接拿还不行,对吧?那怎么拿呀,简单,你就直接这么写来,撤回来numbers,然后点A不就可以了吗?先找numbers,再找点A,这不就明白了吗?告诉人家监视的是numbers里的A,那有些同学说老师他不报错吗?那你说报错的原因是什么呀?原因呢,是你写了一个不合法的key。对象里的K呢,是字符串,对吧?你要是用简写方式呢,里边直接写点是不可以的,那你就得还原成最真实的那个写法,就是直接走这儿,哎是吧,我们之前呀,总是直接写对吧,这么写写的时间长了,你就觉得好像,诶就直接是这样写,其实这是一个简写方式,对吧?原始的写法,诶是这样写的,你这样的话就可以监测到A了,来,咱试一下啊,走,你看A变了,你再加A变了,是这意思,不好,那我们写好注释啊,这种形式呢,那就是监视多级结构中,然后某个属性的变化,对不好,那我继续提出需求啊,我还想让你监测B的变化,说老师太简单了,我在这再来一波就得了,然后呢,小逗号给他一补,这会儿改成B,老师OK。
04:40
哎,那你说如果是这种情况怎么办啊各位,你这numbers里面呢,有100多个KY6,你咋办?然后我的要求是numbers里面任何一个数据改了,那我都想监测到,那你这么写你就写不完了,Abcd那一堆对吧?所以说正确答案呢,不是这么写,那怎么写呢?啊,来同学啊,我再写一段代码,让这个B也能发生变化,便于咱们观察问题,所以说我把这一堆呢,给它再复制一份,然后改就得了,这会儿是什么呢?B,这是B,这儿也是B,这呢也是BOK了吧,好,先看一下效果啊,点A啊A就加,点这个B加呢B就加,OK好了,来刷新,那接下来实现吧,怎么办?说老师简单呀,那就这儿呢,先不要了,你想监测整个numbers的改变,对吗?老师,那就这么写呗,Numbers好正常,写handler啊,如果这个东西发生了变化,我就说numbers改变了,这不就得了吗,同学。
05:40
我问一下啊,你说咱们这么写的本意是什么呀?就咱们这么写什么意思呀,是不是想让他监测整个numbers里面任何一个属性的变化呀,对吧?谁变了是不是都算呀?啊,那也就是意味着好像A变也算,B变是不是也算呀?那你看一下能不能行呢?A变A不好用,B变A不好用,说说这是为什么啊,是这样的啊各位,你这么写呀,确实是在监视numbers,但是view呢,不会再帮你监视numbers里的东西,它帮你监视的是整个粉色框,而不是粉色框里边的绿色的内容,来同学,我这么跟你说就明白了,Numbers是data里的一个key,你说对吗?那value是什么呀?Value其实是这个绿色对象的一个地址值,你说对吗?你比如说举个例子啊,这个绿色的对象呢,在内存中的地址啊是0X123。
06:34
然后呢,各位你顺着这个0X123找到A了,把它变成二,找到B了变成二,但是我想问的是0X123是不是不变的,那V就认为numbers没有变,默认他不看里边的这些东西,你说对不说老师,那我就想让他知道numbers变了吗?那你可以用这么一个暴力的办法来,你瞧着啊,我在这儿再来一个按钮,我这么说叫做彻底替换掉谁呢numbers,然后这里边儿它做这么一件事儿,Numbers等于一个新的对象,然后新的对象里呢,有A是666,然后呢,也有这个B是888,同学,我这么一写不要紧,你说一个新的对象是不是出现了。
07:15
然后呢,就把原来的替换掉了,那你原来那个0X123呢,肯定要发生变化,那这个时候他就认为,哎呀numbers确实变了,那不信你瞧着啊,来我点一下这个走666888是不是算numbers变了呀?啊,但是我的要求是我想让他再往里边看一看对不对,你别光盯着外边的那个粉色框那个地址,我想看看里边,哎同学,一个配置项就可以搞定,配置项的名字呢,叫做deep什么意思?深入的有深度的对吧?冒号开启就可以了,默认呢,它是false啊,一旦你开启了,同学你看这个事儿呢,就比较清晰了,我A变是不是也算numbers变了,我B要发生变是不是也算numbers变了呀,对吧,各位哎,这回不就可以了吗?所以说这个属性一配置,那同学什么就开启了呀,深度监视就开启了,好那这呢,咱也写一个注释,把这一堆呢给它复制过来,这就是监视多级结构中,然后不是某个了,是所有属性的变化。
08:14
说老师啊,那我知道了,就是默认呢,这个view啊,它是不能够监视多级结构里边的这些属性的,是不。其实你这么说呀,这话有点毛病,同学,我再重复一遍这句话啊,然后你仔细听,你觉得对不对,这话是这么说的,View默认是不能够监测到data中多级数据改变的,或者说多层次数据改变的,这话这么说对吗?不对,为啥说不对呢?各位你看着啊,咱们来到这儿去探讨,同学,VM我握在手里了吧,然后我这样做,VM.numbers.b我给它改成999,然后我问各位,你说我是不是在修改多层级的数据,是的,是不是把numbers里的B改成了999对吧?来,我敲回车,请问页面变没变?变了页面为啥变了?那就是view呢?发现了这个B被你改变了,然后拿着B的值是不是放在这儿了呀?那你能说V没有监测到这个B的改变吗?
09:18
不能说老师,那我得咋说呀,你得这么说,View默认是可以监测到多层级数据的改变的,但是view为程序员提供的VO默认是不行的,那你想让它行,你是不是得写这个deep true啊,哎,就这回事,好嘞,各位,这就是深度简视,来,那咱们总结一下啊,各位走读一下深度监视,首先读第一个view中的watch,默认不监测对象内部值的改变,你看默认不监测numbers内部值的改变,那我们管这个叫什么呢?默认只看一层,然后再读第二句配置deep可以监测对象内部值的改变,那所谓的就是什么呀,多层就往里边看了呗,写了一个备注,唯有自身可以监测对象内部值的改变,无论你藏的有多深,它都能监测到你比如说啊,各位我给你测试一下,说这里边啊有C。
10:10
C呢是一个对象,C里边有DD呢,也是一个对象啊,D里边呢,有一个EE呢,是100,同学我问一下我改100,你说view能不能发现我改了这个100肯定能啊,你看一下我在这呢,给你写一个差值语法,然后我得读啊,这回我得读numbers.c.D然后点谁呢?点E好了,那你看一下各位是不是100啊,接下来啊,我要开始改了VM.numbers.c.d.e然后我让它等于多少呢?是88走页面变没变,变了I回到这里面,所以我们说各位就是view是可以监测对象内部的改变的,但是view提供的什么不行呢?Watch默认是不可以的,那你想让它可以,你就加一个deep true对吧?然后最后一句就是使用watch的时候啊,你要根据具体的结构,你决定是否采用这个深度监视,还有就是默认它为什么不开启这个深度监视呢?它为了一个效率对吧,如果你那个数据结构简单啊,那同学不用深度监。
11:10
对吧,你要是层级很多呢,那你手动的开启一下深度监视,对吧,它也是为了一个效率好,那这一小节呢,我们停。
我来说两句