00:00
好,我们继续来做这个依赖收集啊。那么现在我们要解决的问题呢?就是什么时候能够把water放入第1P当中?所以我们现在呢,就可以去写DEP了,DEP呢它是一个发布订阅模式啊,发布订阅模式实际上就是要用一个数组,哎,用这个数组来存储啊,自己的这样的一个订阅者啊,所以在这里呢,我们就要有一个subs的一个数组,Subs实际上是英语sub subscribe啊是英语,哎叫sub subscribe啊四叫订阅者的一个首字母的一个缩写啊,叫subs。好,然后接下来的话呢,我们在这里不是有个notify吗?咱们把这notify呢就可以啊啊首先第一步呢,就是我们要先去呃复制一份啊,就是浅克隆一份,哎,浅克隆一份的话呢,我们就先把它啊,就是让自己的萨S,我们让它SLICE1份,然后接下来呢,是便利,哎便利的话我们来I等于零,然后啊L。
01:10
哎,就等于sub的Les,然后I小于这个L啊。好,然后爱加加好,然后这个时候呢,我们就让每一个人都调用update方法啊,所以你会发现。这个update的方法是不是就相当于,呃,但是呃,就相当于这update的方法,是不是叫water要一定要有update的方法呀,对吧?哎,因为我们在这里实际上上放的是water的实例,这能理解吧?哎,这个大家一定要记住啊,就是subs就是water的实例,依赖就是water的实例啊,等于说这里面放的是water的实力。所以一定要记住啊,就是发布订阅模式,到底发布的是啥啊,订阅的是啥?哎,所以说谁是往这里头放,是water的实例往里头放的。明白吧,啊,就想清楚啊,也就是说这个数组里面放的是water。
02:05
哎,Water的实例啊,Water的实例我们要放到这个数组当中。好,然后这个,呃,但是它还要添加对吧,哎添加订阅,所以添加订阅的话呢,我们就诶就是可以把自己的subs当中去push这个sub啊,这是添加订阅。这是添加订阅,然后这notify呢,这个就是通知更新。啊,一个是添加订阅,一个是通知更新,诶没有什么毛病,好,然后当然了,还有一个叫移除订阅对吧?哎,移除订阅的话呢,其实呃,这个就不是特别关键,我们就先不用去写啊,当然还可以去设一个ID啊,还可以设一个ID啊,ID的话我们就可以在这个外头B包这啊咱们就可以去写一个就是呃叫UID吧,等于个零啊,就这个地方也是咱们构造起的B包嘛,对吧?哎,然后咱们让自己的这个ID就等于我们这个UID加加啊。
03:06
这样每十里一个,它就自己有一个ID了。哎,每十例一个就有ID了,所以这就是个DEP,这个DEP就很简单啊,然后你现在执行的话是很简啊,是没有任何作用的,因为你没有艾sub嘛。对吧,哎,没有地方艾特萨,那什么时候艾特萨那这个时候就开始了,哎这个时候咱们就要开始讲最重要的一件事了,就是我们刚才说的这句话,就是代码最巧妙的一个位置呢,就是我们现在呢,要设置一个全局变量。啊,这个全局变量的话呢,平时是now就是null。然后当我们在决定啊,某个water要放在哪个DEP中的时候,那这个时候呢,我们就需要让他先去读取数据啊,读取数据之后呢,这个时候它是不是就是呃,就就言外之意就是说变量就指向这个water。
04:00
对吧?哎,然后这个时候呢,我只需要稍微在代码中使用一下它。啊,一使用它的话,它是不是就会触发他的gar。对吧?哎,那使用咱们就管它叫touch一下啊,To u c触碰一下,那这个时候咱们就会对这个键进行求职,一求职的话就会触发get,并且这个get可能是一连串的get,对吧?为什么是一连串的get,因为我现在如果是啊,如果我们现在是这样子的,就是AMMN对吧?A打点掉M掉N,那是不是一连串的一个get。这样子的。啊,所以这样的话,它就会调用一连串的GOG,那这个时候我们就是不是就可以找到哪个water,就可以把这个就哪个water是负责,呃,就是这个water是就是。管这个data的,那我这个时候是不是就可以往它对应的这个DEP里头就可以放入这个water啊。对吧,但是最后呢,一定要记得将全局变量改回null。
05:04
明白吗?哎,一定要记得将全局变量改回n nul不就行了吗?对吧,哎就OK了,那这个时候可能你听的就是说有点有点没明白啊,就说这怎么回事,这实际上呢,说实话对初学者呢,是挺不友好的啊,就是这个东西且琢磨呢啊,那老师现在带着你们去写啊,那怎么回事呢?其实就是在这儿,就是你这个第1P呢,这不是有一个这个啊DP吗?DP的话呢,我们在这里呢,就来一个叫底depend的啊,叫做添加这个就是添加这个依赖啊叫添加这个依赖。好,添加依赖的话呢,那咱们就叫底depend的这个方法,底depend的方法呢,咱们就这样写啊,就来一个全局位置,这个全局位置呢,干脆就是这个类,因为这个类它只有一个对吧?哎,这个类它在全局当中肯定是啊只有一个,所以说我们现在就说就直接就用它就是如果第一批。啊,就是这个类啊,它的target属性存在啊,咱们这个target其实就是view的底层源码,就用这个词啊,表示的是目标啊,那这里实际上这个第1P在target,大家不要紧张啊,哎,就不要紧张,哎不要紧张啊,不要说不知道它是什么,它实际上就是一个我们自己指定的全局的位置啊,就是你用window.target也行,明白吧,也行,它只要是全局唯一,只要是全局唯一啊,没有奇义哎就行啊,所以说咱们现就用这个就OK了,第一批他。
06:37
啊,就在这判断,就如果他这个第1P的他的存在。啊,你没听错,存在,那这个时候呢,我们就让它推入到这个数组中,就调用这个添加订阅,哎,把它推入到数组中,那是不是就第一批的他那你说老师你怎么把全局位置推入到我的数组中了。这不是一个全局位置嘛,当然这全局位置也可以win到点它这头这都可以,只要是个全局。
07:04
啊,window.target也是可以的,但是呢,我们现在就用这个DP.target里一样都一样啊,就是说这是一个全局位置,那你说老师你怎么把这全局位置推进去了,它其实就是它的一个巧妙之处。啊,这个就是一个,呃,有雨溪确实是动动动脑筋了啊,这个东西就动脑筋了,确实是很巧妙的指数,就是就是我我的终极目标是什么,终极目标是不是我现在需要有一个特别合理的一个方法。啊,能够把当前哪个。对吧,哎,就是。就是当前哪个这个呃,Water触发的这个get啊,然后才收集依赖,我要去找到这个地方,那怎么办。对吧,那怎么办?那这个时候是不是就可以先把这个water设置到全局的指定位置,然后读取数据,你读取了就touch它了,它就触发这个数据的get了,对吧?然后这个时候get呢,就会从这个全局这个位置去读取当前,当前正在读取的这个water啊,我们再把这句话重新说一遍,就是get函数当中呢,就会从全局唯一的这个地方啊,读取正在读取数据的water,并把这个waterer再收集到第1P当中。
08:17
对吧,哎,所以他是这样子的,一个一个一个一个流程。好,那这样的一个流程之后,我们再去看一下这个DeFine reactive啊在DeFine reactive当中呢,我们现在来去看一下这个get是不是现在要进行一个大方面的一个呃,一个改革了,对吧?哎,Get就是一个大方面的一个改革了。对吧,哎,那怎么办?对,我们现在就需要看他这个时候是不是有一个这个呃,有一个这个这个这个这个这个呃DP它是不是正在处于这个依赖的一个收集阶段。对吧?哎,那我们在这里是不是就可以去写if语句,就是说如果啊,咱们现在呢,处于的一个是依赖的一个收集阶段。
09:04
啊,依赖的一个收集阶段,那我们现在就可以写if,就是if第一批的target对吧?哎,那我这个时候就第一批的depend不就行了吗。对吧,哎,就让这P,那DP是什么,不就是这的一个DP吗?咱们刚才都写好了呀,啊,就让他添加这个这个依靠就行。好吧,哎,然后当然咱们现在还需要判断这个子元素啊,你这个子元素刚才不是一直在这定了个名嘛,啊,然后咱们现在还要检查一下它,就是如果它存在,那我加上他的第一批是不是也得底喷一下。对吧,哎,就OK了,现在应该是不报错的啊,但是呢,是没有任何情况的啊,就是我get了get的话,你不是访问这个属性了吗。对吧,访问好多属性了,M属性什么的,对吧,那么这个时候实际上这个就底碰上了。对吧?哎,那么咱们现在就再把这个water完善一下就OK了啊,那这个water的话,实际上它就是呃,这个water其实就是首先肯定也要有个ID嘛啊,咱们在这先定一个ID啊,然后构造器当中这有一个ID,自己的ID呢,就等于UID加加啊这样的去写。
10:14
对吧,哎,然后呢,要有一个叫target属性,Target这种事就等于target啊,就等于自己的目标。好,然后呢,这块再来个get。啊,再再来一个get get是什么呢?Get的话,我们这个时候就需要啊,呃,View源码当中就会有一个函数叫pass pass,哎,然后呃是个表达式啊,就是EP,那这个EP是什么呢?就是你这个watch的一个构造器。啊,它的第一个是target,然后第二个呢,是他的expression。啊,Expression,然后第三个呢,是它的回调函数,那这是什么意思呢?其实你就可以通过咱们view当中不是有一个有个viewe实例,有一个Dollar watch这个方法嘛,对吧?哎,那他这里头就会有三个参数,第一个就是你要监听谁,那监听他自己啊就不用写了,第二个你要监听什么属性,就是A里的B里的C里的D。
11:09
他这是不是带点的这种语法呀,然后你要干什么,这不是一个回调函数吗。是这样子的,所以相当于这个watcher是什么?这个watcher就是说它构造的时候,你就要去传,你要监听哪个对象。对吧,然后哪个对象的什么样的表达式啊,谁点谁点谁点谁。对吧,然后这是回调,那这块的话呢,它这有一个get属性,Get属性上呢,它就可以去把你这个表达式给按点来进行一个拆分。啊,就是你这个pass,你这个pass这个pass这个函数啊,它就可以按点来拆分,就这个get。啊,那这个函数的话,其实的话呃,有点有点不好,不好写,说实话啊,有点不好写,但是呢,呃,咱们也可以单独的再去新建一个,然后把这个函数测试一下啊啊,我们现在去新建一个,新建一个,比如说1.html啊,我们再单独的一个页面上啊,把这个呃函数单独的去写一写,就是他如何能去拆那个点。
12:12
啊,就是那个那个点语法,我们要去能给他啊,彻头彻尾的给他给他啊,给他拆回去对吧?哎,我们要能把这个一个部分一个部分的给他,给他能。呃,能返回它返回什么,返回这个对象的这个这个这个这个这个这个这个呃,这个这个这个这个这个这个每个部分啊,接收这个对象每个部分的一个函数。啊,那什么意思呢,咱们现在来看,就比如说我现在这个呢,就等于A的B的C的D。对吧,哎,那我现在呢,就可以有一个函数叫pass pass啊然后呢,它这里呢,就接受一个string,哎,接受一个字符串,或者叫啊这样子的。然后在这里干嘛呢,我们首先呢,就需要先去呃测试。啊测试一下,哎,测试一下他这个是不是以这个呃以是不是就是就是呃就是怎么怎么说呢,他是不是测试它这里头只有啊只有字符点。
13:14
对吧,哎,然后呢,呃,他要验证一下他这个东西是不是一个合法的啊,当然合法性我们一会再测试吧,先不测试分法对吧?诶我们先可以让这个死啊,我们来去进行一个split啊,先去根据点来进行一个拆分。那这块呢,它是不是就变成了一个啊数组了,那咱们可以叫segment啊,Segment就是部分的意思。好,那这样的话,我们就可以输出这个部分,我们调用一下这个函数。好,然后我们先运行一下它。哎,咱们把这个函数单独的拿出来测一下,你看这abcd就出来了。啊,Abcd线就出来了,好,Abcd现在出来之后,我们现在要干什么呢?就是要便利它啊,但是这块比较比较比较麻烦,就麻烦在它这个东西呢,不是便利,而是直接返回,返回一个接受一个对象的一个函数。
14:11
啊,它是这么玩,然后这个函数它干嘛呢?它可以let I啊let I就是呃,我我我们要遍利它等于零,然后I呢,小于这个segments的Les啊,我们要便利它,然后I加加。看见没有,哎,然后便利它干嘛呢?对,就是我们要看。要要让OB勾就等于什么,就要等于OB勾的方括号的这个segments里的第项啊这样子。啊,然后最后呢,我在这块,呃,这个这个函数当中,我要返回这个OB中。看见了吗?是这样子的。啊,那这个东西如果说你基础知识强的话,你会知道这是一个高阶函数。啊,就是函数内部返回一个函数对吧,而这个函数呢,又返回对象啊,那也就相当于它返回的这个函数是收一个对象,而这个对象的属性呢,对吧?哎,这个对象的这个,呃,这个对象会被会被他来去添加属性。
15:16
看见了吗?对吧,哎,会被这个东西来添加属性。是这样子的。对吧,那这个东西为什么是OB勾等于OB勾的这个它是不是一层一层叠上去了。因为你是A里的B里的C里的D,所以他这个东西就能叠上去了。对吧,那所以说比如说我现在有个oo的话,它是A里的啊,B里的C里的对吧,B比如说等于个五五啊这样子的。那现在你不是pass了吗?Pass之后它返回一个什么,它是不是得到一个FN啊。它得到一个函数,这大家能理解吗?所以这个时候你输出FN,它这个时候它能输出一个函数。因为pass一个死TE,你把这个死TE就是a.b.c.B啊,我把这个直接放进去啊,这个死咱不存了,让你们看的清楚一点。
16:05
我把这个a.b.c.D放里头之后,我pass之后,这不得到一个函数吗?这是这个函数。没有问题吧?好,那么这个函数现在是什么?它是不是又能接受一个OB勾对角?对吧,那这个OB勾对象它就会一层一层叠上去,那所以说当我现在FN一个on一个O的话,会怎么样。对,这个时候,这个时候它就会返回一个对象,那这个对象是什么,不是它本身吗。对吧,它就会从它会变利嘛,变力的话,那这个时候不就会先去把O的这个A。看见没有O的这个A。大家发现没有,就O的A嘛,因为这是OB勾方括号A嘛,然后设成了这个OB勾。啊,设成了OB勾,你不能设成OB勾二,因为你下一次循环的时候就没有OB勾二了,那这就变成二了,所以它就一直是OB勾,所以这个时候OB勾就不是这个黄颜色括号了,而是变成了粉颜色括号这个对象。
17:04
对吧,然后我执行第二次循环的时候,那他不就要去迭代这个segments里的这个B这个词吗?所以这个OB勾就会越来越小,发现了吗。对吧,Obq就会越来越小,所以这块它就有一个呃比较比较好玩的一个判断啊,就是我这for循环的时候,我先要去就去,如果啊,你你为了安全起见,就如果我现在这个OB勾不存在啊,那这个时候呢,我就要return一个空就行了,哎,就为了防止它呃不存在,不是就说这个OB勾不存在了,然后再打点啊。看见了吗?那这样的话我再刷新大家看一下,但是这块没有输出的结果,哎,没有输出的结果,为啥?因为现在它是没输出。对吧,哎,没有输出,那我现在就FN这个O啊,那FN什么呢?是不是就FN刚才那个a.B就我就直接把这个O搁进去了啊,不存变量就FN它。
18:01
那FN它的话是不是就有一个,就有一个值啊,那这个值是什么,是不是就是55。就是55就输出了。看见了吗?所以这个这个函数写的还是挺有意思的。啊,就是这个函数是一个高阶函数,它呢会返回一个函数,而这个函数就接受这个对象啊,然后他就会利用这种一层一层的逐步缩小,把这个OB勾变得越来越小,变得越来越小,对吧?哎,就很神奇,一层一层的把它变得越来越小,越来越小。啊,越来越小,越来越小,越来越小这样子的。诶就缩的是很小的,然后啊,最后就把这个值给得到了,那是不是这个东西就就就。大家都能明白它是怎么回事了,对吧?哎,那这个FN本质上是什么?对,本质上就是说它是可以适配任何一个对象啊,把这个对象按这个结构给进行拆分的这么一个函数。啊,这是咱们这个东西的一个比较好玩的一个点。
19:00
那所以说这个函数我现在就能拿来用,咱们言归正传,我们就能拿到这个watcher这个里头去用。好吧,哎,我就我就可以把它这个放到底下,因为声明函数声明能提升,所以这块呢就能把它提上去,提上去之后这一个position就给了他的一个get,那为什么叫get了,因为你想啊,Get是指的是获得器,那么他刚才不是得返回一个FN嘛,这个FN不就是根据这个expression那个级别得到的那个获得器吗。对吧,哎,所以说这个get呢,咱们就解释清楚了啊,然后接下来的话呢,我们就需要把它这个water。哎,把它这个water啊,不是water就是call back啊,给它给设一下啊,就是这个call back call就等于你传进来的这个call back。诶,然后自己的这个Y6呢,就等于你自己调一下get。啊就OK了啊,调一下get,那这个get方法呢,我们在这里就需要,诶OK,那这块就要进入依赖收集的一个阶段。
20:05
啊,怎么进入依赖收集的,是不是我们就要让第一批的这个target对吧?诶这个target我们是不是就应该让他等于个他自己啊,就等于这个实例本身。啊,我只要让这个全局的东西设置为它,它就表示进入一来收集就完了,对吧?诶让全局的这个第一批的target。啊,设置为咱们这个water本身。哎,Water本身那么就是咱们这个,呃,进入了咱们这个依赖的一个收集阶段啊,就进入到依赖一个收集阶段,这个就很简单。那么它进入到依赖收集阶段之后,我们现在要干什么?对我们现在是不是就相当于我们现在要先去,比如说把OB勾拿到,看的一个OB勾拿到,拿到的话他就是自己的,呃,这个target啊,先把它自己的target得到,就这个啊。传进来的target。
21:00
好,然后干嘛,对,我们这个时候是不是就需要用自己的这个gar,还记得咱们刚才那个。对吧,一连串的那个单词对吧,去把这个OB勾往里调啊,这个get就是我们这个HTML文件中的这个FN函数。对吧,然后这个FN函数要掉啊,要把这一串东西往里放啊,放什么,是不是放这个OB勾。对吧,哎,OK了啊,当然了,你这块要去写一个try catch语句啊,为什么要去写try catch语句,因为它防止他找不到了,就只要能找啊,就就一直找就一直找,那这个时候只有try catch语句能够适合啊,这里只没有别的办法了,只能try catch了。哎,只能踹开了就踹啊,当这条语句线没毛病,当然这块可以有一个Y6啊,就是把这个返回值给存上,那这儿就是一个Y6。好,然后那finally大家应该知道,就是最终对吧,我们就让这个第一批的TARGET1定要设置为now啊,别忘了咱们刚才PPT上已经说了,就说最后一定要去把它给设置为闹啊。
22:08
哎,最后千万不要忘记。哎,就让他就退出依赖收集阶段,就是这个waterer就把依赖收集阶段的资格让给了别的water。啊,因为所有的watcher都在竞争啊,当前是哪个waterer正在读。明白吗?那哪个water在读G,是不是就是哪个water现在是第一批的那个target呀。对吧,哎,所以他现在是这样子的一个形式啊,很巧妙,非常的巧妙,简直是特别的巧妙,但是不是不容易让人懂。啊,就是这个东西不是特别让人懂。哎,但是呢,确实是很巧妙啊,大家试着去理解,试着去琢磨。好update的方法,那就是更新,更新的话呢,我们就调用run方法啊,然后run方法当中呢,Run就是跑的意思嘛,对吧?哎,那run的话就是叫做啊得到并且唤起。
23:01
啊叫这块有一个叫get,这些都是v view的源码当中的函数啊,叫得到并且唤起啊把自己的扣back传进去,那这个函数是干嘛的呢?这叫得到并且唤起。啊,那这个时候的话,首先他必须要去得到调一下他自己的那个GA的方法。好,Get方法的话,我们现在给他存成这个value啊,那这块的话是不是就相当于老百姓说的刺激了一下这个get方法。对吧,哎,然后他就做这个了,因为你这个get方法在这有个get方法。对吧,然后就get了,Get的话返回这个Y6啊,然后当你数据更新的时候都用run run的话是不是也会得到唤起,也会有一个get。好,那这有一个get之后呢,我们在这就可以去判断,就是如果这个VALUE6不是自己的value。啊,或者这个value它是一个,呃,对象就是type of这个value。啊,它是一个对象。
24:00
好object啊,那这个时候的话,我们就可以让呃定义一个叫old value啊,就等于当前的这个value,然后让自己的这个value呢,就等于你传进来的这个value。好,然后我们再让你这个回调函数去扣。啊,你这里不是有一个CB吗?哎,这个CB是这个,呃,这个这个这个呃,回调函数。啊,我们就要让这个回调函数去。呃,把它给这个给他调一下对吧?哎,把它给调一下,但是这个,呃,一般来说,我们现在是要去去传一个在这对就要传一个call。啊,在这需要传一个扣,因为这有个call back,在这扣back,所以在这里呢,就需要。调,但是调的时候呢,上下文要设置成自己的target。哎,然后自己的value和自己的old value啊,这样子的啊,这old value就是参数传过去。好,那现在呢,我们就可以主动的在index这里头去把water引一下,然后咱们试一试啊,然后看看这water好不好用,哎,Water。
25:06
啊water,然后from点杠这个water.js啊,我们把这个water就是主动的去引一下,好这个water呢,我们就主动的去给他引一下,引一下之后呢,这个时候我们就可以去拗一个water。啊,咱们来看一下,就是拗一个water,看看这个好不好用,哎,New一个water,然后我们现在是OB勾,哎,然后我们现在去监控它的A的M的啊N好吧,哎,A的M的N这个属性啊,咱们刚才不是写了半天嘛,然后接下来呢,它就是要传一个函数。啊,传一个函数的话,这是他的新值,新值就会传进来,传过来对吧?哎,然后我们现在在这里写一个,写一个log啊cons.log。哎,咱们把五角星印出来啊,就印一个五角星,就表示我们自己的water在监控它的这个属性啊,然后我们把这个Val给放进去,看看能不能输出刷新,你看是不是输出了。
26:03
对吧?哎,你有没有觉得这一时刻很爽。啊,并且瞬间知道watcher是干嘛的了。现在知道water是干嘛的了吧,是不是就相当于我们现在只要我调一个,然后我如果不给它改成八八,你看。他是不是就不会输出五角星,我只有真的改了A的M的N,它才能变。啊,所以说。直到老师把这个东西拗出来的这一刻。啊,我估计你你心里才明白他是干什么的。啊,他是干什么的呢?它其实就是起到vuee组件当中的那个watch那个作用,对吧,但实际上所有的指令,包括V-model啊,咱们下次就是这个系统课必有源码探秘课程,咱们就会讲这些指令,那么那他其实这个指令当中呢,其实就是用的是这个watch。啊,其实就是这个watch,那watch的机理,你看这其实就是一个对象啊,一一串这个东西,然后一个函数,那这块的话就到这个watch这了,那water它是怎么玩的一个对象啊,一串表达式,一个函数。
27:07
啊,然后它是通过首先这个表达式呢,是拆掉啊,通过这个get。然后这个时候的话,那它为什么在这能输出,因为我一扭了它就盖它了。对吧,然后他1GET的话呢,他在这儿就开始掉get了。啊get呢,那不就相当于是我们这个函数拆出来那个东西嘛,对吧?哎,拆出来这个东西,然后又把OB勾放进去了,所以他就已经开始用它来执行它了。啊,用它来执行它了,那这个时候的话,我拗的时候并没有改变值。对吧,那他干嘛了?对,他现在就是要让这个DEP能够DEP的target不就等于闹了吗?不是不是等于闹了,这个DEP的target不就等于this了吗?那这个第一批的话,它就有一个全局的一个一个第一批是全局唯一的啊,因为八派的打包的时候,第一批是全局唯一的。啊,不管多少个JS文件,在用这个DEP的时候,它实际上都是这一个文件。
28:02
那所以说这个第1P,现在大家有没有发现他这个第一批的target,他这块就会啊,因为因为这个这个depend是谁在调,是因为我在呃,我在这个我在这个这个这个这个哪的时候去调了这个这个depend啊。在这个这个这个这个这个DeFine react的时候啊,这。对吧,因为我现在需要去便利他的这个所有的,所以这块的话就会这个地方是不是相当于为针了。啊,因为啥呢,因为因为我我用用它的时候,它就为真了。明白吗?就是我牛water的时候他还没为真。但是他牛就牛在我。我OB勾点a.m.N的时候,那这个时候是不是它就触发了我现在这个def DeFine当中的这个get。对吧,那这个的话,他不就开始去在这里就有一个这个depend了吗。对吧,然后你这depend的话,我们就回到这啊,回到这的话,那呃,第一批的这depend它不就开始艾sub,艾萨的话就把它推入到了我们这个这个里面subs。
29:08
对吧,然后当数据更新的时候啊,就是数据更新的时候,那实际上就在这里,它不就是会通知啊,你这个update嘛,那update的话,它实际上在这里又慢慢绕就绕回来了。啊,所以最巧的是什么?最巧的其实就是这里的一个get。啊,对吧,哎,还有get,还有remote,就当你这个数据被更改的时候啊,他在这里能够调用run,它就不就相当于run嘛,Run其实调用他的啊,那其实这里就不用再调用run啊,Vuee源码提了个run,所以邵老师在这就有run,其实他可以直接这么写就行了啊,但是我们还是提了一层,提了一层之后,这个函数就在这里在掉,所以它就能够去起到一个监听的作用。啊,大家应该发现了对吧,他这样就就起到了一个啊,非常非常好玩的一个监听的一个作用,就完事了啊,那么这个时候的话,你就会说老师只有他用这个类吗?啊,第1P类用不用引,不用第1P类类不用引water类,它跟water类没有关系。
30:12
对吧,哎,然后呃,然后那个什么类要不要引呢?就是呃这个这个这个这个这个呃叫叫什么叫呃发那个这个relative不用,他们都不用啊,那就是你的主程序用,那主程序是什么?主程序实际上不就是voe的其他部分吗。就是VE的指令啊,然后VE的指令啊,然后模板引擎啊,地步算法呀,最小量更新啊,虚拟节点这部分。对吧,所以说这个water的话,你就会发现,就相当于它是一个像相当于咱们那个Java中说的接口似的,就是你不管你现在谁在用这个地方,这个数据是组件也好,还是模板,模板也好,还是地铺算法也还是虚拟到我们虚拟节点也好。对吧,哎,就不管他是他是谁在用啊,就这个water是不管是谁在用这个water,然后他现在永远能够把这个监听起到作用,那既然起到作用了。
31:07
那我想问问大家,是不是他就能去更新视图。对吧,既然他就起到作用了,那是不是他就应该能够去更新这个视图啊。对吧,哎,就能够去更新这个视图,所以说就相当于这个功能啊,这个这个操作就起到了啊。对吧,五角星,哎,五角星就表示的是我是water啊,咱们不写五角星,就写个一个五角星,然后写个叫我是water。啊,然后我在监控这个a.m.N。所以PPT上面这些文字呢,一定需要去啊,给他能够彻底的理解啊,你背是没有办没有办法背的啊,背当然是背不下来的,你现在是必须要在PPT的这个基础上啊,然后能够去理解它才行。啊,然后呢,能够把这个代码你能够去写会,然后一定记住写代码的时候呢,先去扭它。
32:01
啊,写代码的时候先去扭。哎,然后扭它的时候,你就很清晰它是怎么回事了啊,当然了还有一个就是啊,刚才老师呢,也把这个啊,就是特别复杂的东西对吧?哎,那这个时候我们就相当于在这里对吧,特别复杂的啊,就给你单独的提出来了。啊,就这个pass pass pass这个函数。啊,这个高阶函数好吧,哎,所以这块呢,希望大家能够理解它是怎么回事啊。好,请大家多多的加以练习。
我来说两句