00:02
来,我先把这个关掉啊,咱们从上午从安GS入门,嗯开始咱们先嗯过一遍复习一下。首先,安格拉GS,它是谁推出来的框架?谷歌推出来的一个啊,前端开源的一个GS。叫结构化框架。啊,说到这儿,你应该立马去回想一下之前学过的解剖瑞,它叫什么啊?它是一个良好的GS函数库。在结块瑞里边,它特点是什么?在这我们这不是有与解宽瑞的比较吗?解化瑞主要作用是分装解化我们的当位操作,哎,分装简化我的当操作。而安拉GF呢,它的主体不再是到。而是页面中动态的数据。哎,动态的数据。
01:00
为什么这样说呢?我们接下来能看到它,首先要知道安格拉GS主要用于干什么,通常来说是去构建单页面应用,哎,用它比较方便。安朗GS的作用,然后呢,我们从入门开始啊,一直到这个三个重要对象,那入门这我们就不讲了,四个重要概念里边有一个要求答案必须要掌握了啊,叫双向数据绑定。通过这个双向数据绑定,其实也能反映出来,安拉它的重点是页面中啊动态的数据。来,我们来看一下什么叫双向数据绑定。他在这儿强调一个东西是数据可以从view层流向model层,反向也可以从model流向view。其实这个东西好理解,说白了就是数据在页面和内存之间来回的传递。就看他数据传递的方向是什么样的。
02:03
我们上午用了几个指令,一个叫NGT,还有一个叫NG model,哎,还有一个叫表达式,问下来啊,NG它数据绑定是单向还是双向。单向,那么这个单项是从哪流到哪?View流向model,哎,这个下来还得大家自己去体会一下,为什么说是view流向model,因为我写的时候我很明显我是写在写在HTML结构里面的。而它最终生效,我们能看到他是在model里面。哎,NG主要用来为当前的作用对象去初始化数据。然后我们用了一个NG model,而这个NG model这个指令,哎,经常用到。你不管是在安里面的NG model,还是在view里面的v model。都是用来进行双向数据绑定的。
03:03
一讲到双向数据绑定,就是它的数据,数据流向是两个方向啊,这些表单向之间离不开它。然后还有一个是表达式。理解表达式这一块,首先你要知道表达式是干什么的。这呢也给大家写出来了,呃,在那个入门这边,表达式主要是用来显示数据的。而这个数据是从哪来的呢?数据从哪儿来?Model对,他是问他所在的这个作用对象里面指定的属性名上去要。哎,指定的属性名上不是说你随便写个什么,我model的数据就给你留过来,你必须要一对一点对点问他要,如果他有你才能显示。
04:00
一定要注意表达式这儿我们在页面能操作它吗?能不能操作,对,你很直观的能看到页面上只是显示的数据,你根本没有操作的机会。哎,这是我们要理解的东西,那接下来啊,我们这三个重要对象这一块比较重要。首先我们接触的第一个叫作用欲对象。哎,作用用那些。你打开这个工具看一下,首先我们一上来接触的一个对象,它叫根作用对象。而这个对象是NG pap,这个指令它是不是自动生成的?那现实的开发当中,除了这个跟作用于对象,哎,下面还有很多的叫作用于对象,就是没有这个root的,哎,并且这些作用对象是我跟作用于对象的子对象。那么下面这些作用对象怎么来?
05:02
我们又引出另外一个叫控制器对象。首先我们要用到了,哎,需要做的准备工作是一个指令叫NG controller。这个指令它要指向的是一个叫控制器的构造函数。也是你提前要准备一个构造函数。而当我NG卡通指向这个构造函数的时候,安德拉会自动利用这个构造函数。我们需要做的是,在构造函数这一块,你是不是得提前去申明一个行参?而且记住了,这个行参必须是他,你换成型他的安格拉GS解析不了。哎,这个形态叫Dollar福。Scope。那当我声明好了,他最终目的是把真实的作用于对象Dollar scope是不是给我注入进来,而我们最终操作的就是它。
06:06
它相当于是安德拉GS的内存啊,虽然说有点不太严谨,但大体上可以这样去说。因为我大部分的数据是不是都可以放在我这个对象里面。啊,知道了,这以后我们最后一节课又整了一个叫模块对象的概念。到这儿为止,我们引入的安格拉GS是比较新的,是1.5。而在这里边,哎,咱们又换了一种方式,也就之前那种你手动写一个构造函数那种方式,现在已经不用了,淘汰。现在怎么用啊,你上来第一步应该是先去考虑创建一个叫模块对象的东西。有的模块对象干嘛,第一步模块对象这是不是有个名字。
07:01
这个名字给谁呢?我们上来是不是要去接管我的区域范围控制它啊,NGB指向的就是你模块对象的名字。而这个模块对象创建用的是安点module这个方法去创建的。有的模块对象还能干什么事情?哎,它里面有很多的API。我们经常要用到一个叫controller,而这个方法哎,正是去取代以前你去自己去定义个构造函数那一步。它是一个方法调用,那么它需要传三第一个参数。这个是我写好的吧。第一个参数是,哎,在这儿就是那个name,我们之前写手动写一个构造函数,定义的那个函数名字放到这儿,而第二个参数,这个函数和之前的构造函数的作用是一模一样的。
08:13
所以在这我们需要去申明一个行参,这没问题吧?然后里面的东西一样。上午我们是先写了这一种,当然了,这一种开发的时候肯定不会用。我们讲优化一下,是不是用了一个劣势调用啊。用列式调用写成这样,哎,就到这一步。接下来还有点儿问题。因为时间关系,我没讲啊。其实以上的代码有问题啊。你有什么问题?大家看这。这个函数这个形态是不是叫Dollar复斯吧啊,我们讲了必须是它那压缩的代码,你们有没有看过压缩的GS代码应该是看过。
09:02
我给大家找一个。就拿这个来说。压缩的代码有什么特点呢?咱抛开是一行这个不说啊。这这个不叫特点了,那他还有其他什么特点知道吗。节。大家看一下,你们多看一下这些压缩的代码,你会发现一个问题,它里面函数的行参。跟你之前写好的那个压缩之前的是不一样的。你看所有压缩代码,它里面的行参通常来说都是abcde这些字母。简单的字母。那我们看压缩之前开发的时候是这样定义的吗?
10:02
肯定不是。压缩有个特点,就是将你的行参以字母ABCCD之间所代替啊。那我说一下。GS代码啊,压缩后行参会用abcd这些字母。代替那。你想我们开发的这些最终上线之前肯定是要去压缩的。那一旦压缩的话,我这个Dollar就会用abcd代替你压缩了,没问题,但是安格拉GS又解析不了了。也就是说当我的项目上线,你说代码压缩的时候啊。Dollar scope这个行参会被还是abcd这些字母代替。导致的问题是安格拉解析不了。
11:02
哎,这是他客观存在的问题。但是呢,也有解决的方案啊。这是安格拉专门针对这个问题推出来的,大家看我怎么写上来。第一步创建模块对象没有任何问题,接下来你是不调用CTRL方法,然后这个名字不用去动,那接下来后面就不一样了。他之前是直接传一个函数,相当于回调函数,现在是一个数组,数组里面有两个值,第一个必须写它。它是一个字符串,就叫Dollar scope,然后第二个是一个function,诶在这个。第二个参数作用和之前的function是一模一样的。然后里边的东西不用动。那接下来还是劣势调用。
12:02
来,我把这个拿过来这儿改改,这是二,然后我先把这个名字换一下,我呢先把下面这个注掉,我们先来看这一把写的东西行不行,写了以后给大家解释他怎么去解决的这个问题。首先你看效果没有任何问题了,那回头我们来看一下。他只是在这一块做了文章,哎,怎么去解决的呢?他这样设定,我说了前面这个必须是Dollar stop,也就是说我不管你压缩成什么样,当安格拉GS去解析的时候,他上来就找我数组下标为零的这个数据。看看是不是它找到它以后,立马用它去代替你后边函数的行参。也就不管你后边压缩成什么样了,没有关系,最终我还是用它来换掉它,那这样的话就可以保证我这个行参肯定是Dollar scope。
13:06
能懂吗?哎,他上来就先找他。那这样如怎么就解决了呢?我问一下呢,数组里面的这个东西压缩的时候会不会压缩成其他的。肯定不会,如果说压缩成其他的你。必然会出错。这相当于是数据了,你不能去动我的数据。哎,这种解决的方案呢,嗯,它有个专业名词叫。写是。失明依赖注入。写示的意思就是它针对这一个特点说光明正大的要强调突出,我就是要注入的是他。而这种注入的方式是,哎,声明是依赖注入,所以连起来是显示声明依赖注入。上边我们之前写的这种方式,突研也有一个叫这个叫影视。
14:07
声明啊,影视声明依赖注入。隐射的意思就是哎。悄悄的就把这个就给注入进去了,而我们如果说一旦从开发中肯定是要写这种方式。嗯,这个大家需要知道啊。大家能听懂吗?到这儿。那我先把这个停一下,咱们再。
我来说两句