00:00
来咱们接下来讲,那讲完这个依赖注入以后啊,我们来看这个三个重要对象里面第二个,诶这一版我们要学的是模块对象和控制器对象。来。还是先把这个打开,那打开的时候呢,我把prepare的写好的也给大家打开。先来看这个效果。你一看这个效果是不是我们之前看到过,哎,一个输入框一行文本,一个输入框一行文本,然后呢,我去输入它,哎,它是不是只影响的是它。那同理,我输入下面这个肯定是只影响它了,那这个时候你肯定是想要看一下它具体,哎,它的内存结构。这一把看看和我们上一把有什么区别?首先上来跟作业对象没有关系吧,这应该能懂,有的同学可能去纠结,上一把是0011,这一把是一,这个不是我们纠结的重点啊,因为当你下边的东西多的时候,这自动变为一了,跟你的001是一模一样的,能懂不?
01:08
但是这一下边我们之前是不是多了一个二,那这一把你会发现又多了一个三。那这个三是个什么东西。我们先大家看,其实这个工具很有好处,你一上去它会告诉你它控制的范围。看到这个光标,现在是整个区域吧。我移到这个二。现在是不是就这么宽了。同理,我再移到三。他是不是只管下下面这一块区域呀。其实到这儿大家应该是能懂这个三肯定是一个对象了。来,我把这个二点开,你看一下。这有个属性名叫EP内啊,代表的是员员工的名字,他上来是不是有个初始化的数据叫Tom。而我页面正好是将它这个初始化的数据是不是展现出来了?然后你看一下这个三。
02:03
他也有个属性名。是不是也叫EP内码,这样是不是显示在这了,到现在为止,这两个东西能说明一个问题。大家看我里面这个变量,故意弄成同一个名字。属性名是不是一样,但是。我这互不干扰吧,说明一个问题。他俩是什么关系?啊,有,有同学说兄弟,有同学说平级其实都一样,也说他俩根本没有权限去互相影影响对方这的做法,那至于说这个三怎么来的,哎,就是我们这节课要探讨的东西。Prepare我先放到那儿吧,来看这儿,哎,这一把呢,我们得看一下安拉JS的文档。在我们主要研究的是这个NG,这个NG代表着angle,就核心的内容都在这儿,而下面这些是它的第三方扩展库。
03:03
这能懂吧,啊扩展复制在你基础上再去扩展一些额外的功能。这个NG这怎么看呢,在移上移到这个小加号,哎看点开它。这是不是还有,还有我们找哪个呢。点这个。NG,这没问题吧,还得叠啊,是不是?要不然你这个加减号做的大一点也行。嗯。来移到这,往这边移一下。看个东西吧。这不是有个Angela吗?安拉点点什么说说白了,这些后边的这function代表是函数的意思,后边这些其实都是安拉这个对象的什么。方法。那现在我问一下大家,这个安这个对象,我们到现在为止还没有用过它呢。对不对,那这个对象哪来的呢。我们可以来测一把。
04:02
注意了,从这节课开始,我就引入的是一点儿五的了,就是新版本的。这没问题吧?我先去给他打印个东西。我什么也没写,什么也没写。首先这个对象肯定是有的,然后我点开它,其实这个里面显示的就是你文档看到那些。这一堆。先不要管里面的内容,我先问一下大家这个对象是哪来的?肯定是引入他。才有的,如果说没有他,你上来就有安拉对象吗?这肯定没有,这应该好理解,就像大家在学j query的时候,我们讲了,当我把j query这个库引进来的时候,全局自动多了一个叫Dollar福的对象。或者说是。Query,那为什么会多他俩呢?
05:03
这块的源码看过吗?多多少少看过一点吧。为什么会有他俩?或者说为什么我拿过来这个Dollar就能用?你怎么能看到他呢?这是因为杰克瑞这个库,它在分装的时候,我就分装了个Dollar对象,然后最终我向外是暴露了,暴露怎么向外暴露了,我把这个对象作为一个属性添加给谁了window了,所以你拿过来才能直接去用它。那多吧。知道了这些,那我们来在这看。我们现在要找一个东西叫他。这个。Module module什么意思?这个要和我们那个model要区分开,Model是不是模型的意思啊,哎,Model是模块的意思。
06:01
好。安拉的model注意了,我们来看一下,它可以在全局位置去创建、注册、获取安格拉的模块。所有的模块都必须使用这个机制注册才能去生效。这句话说的其实不太好懂,我们直接看一个例子吧。大家看这一个,这一看就定义了,自己定义了个变量。那后面这什么意思啊,Angle module,这是不是一个函数调用,然后里面是不是要传参数。传几个两个第一个参数,这是什么东西啊,你看到埋这种,这肯定不是固定的,是我们自己写的。你们看一下文档,通常看到埋这种是自定义的,这能懂吧?我们在这儿要去创建一个模块,而这个就是当前模块对象的名字。也是它的标识。而后边这个数组是干嘛的?这个里边要放置你依赖的安格拉GS的第三方模块。
07:08
就是我们下面看到这些东西,如果你要用它,你就放进去,不用的话,这儿就是一个空的数组。我们为什么这节课要看它呢?首先我这引入是新的版本。而上一节课,我们再哎,不是他。像作用力对象和控制器对象的时候,我们讲了要生成那个作用对象,你是不是得提前定义一个构造函数啊?其实实际开发当中根本不会这样,而现在的新版本也不支持这样,他这样有点落后了。我们现在如果说用安拉GS开发第一步,我应该是干嘛呢?给大家写一下。你上来应该先去创建一个叫模块对象的东西。
08:02
创建模块对象。如何去创建呢?用的就是安点,它不有个方法叫Mo吗?传两个参数,第一个是模块对象的名字,你随便写。比如说我这起个叫MYAPP。这没问题,特别如果说有依赖模块放弃没有的话,你就得写一个什么空的数组。而当前这个方法调用有一个返回值,就是模块对象。比如说玩一个买。Module等于它,我来接收一下。创建这个模块对象有什么用呢?大家还记得我接管区域的话用的是哪个指令不?是不是我们在八这写的NG-APP啊,我之前说了,我们暂时等于空串的情况下,是不是可以省略不写。
09:02
而实际的开发当中,这肯定不会省略不写。他必须要指向一个东西。有没有发现这个智能提示。那你说指向谁啊?指向的就是你创建的这个模块对象的名字,哎,它俩是一套的,能懂不?然后我就写这么点东西,打开这个。这是不出来了。注意一点小细节。看这。我那个模块对象的名字现在是不是在这儿,那你看一下以前呢。找一个吧。把这个关了。我们之前那个NGAAPP是什么,什么也不指向,哎,那显示是body,而我们真实的开发当中是要指向一个模块对象的名字。而这边显示的就是那个模块对象的名字,这没问题吧,其他的没有任何的副作用,没有任何的影响。
10:04
好了,模块对象有了以后,接下来我们很有可能要去生成一个叫作用于对象了。生成作用对象。大家看我这个之前,我先把这个关了,这个之前写好了,我们要考虑生成谁了,二和三了吧,二和三我讲了之前我们是提前定义好一个。自己写一个函数,然后NG controller去指向它,现在不用那个。不会用它的,如何去生成呢?那还得看文档。你们呢?比较垃圾的是,他在这儿没血,你还得出来。首先第一步你得知道用安拉model创建模块对象,然后把它收起来吧,再往下。看到这个下面是不是有个NG太棒,来把这个点开。
11:00
他又把这个东西放到哪了?这是不是又有一个注意了,我这个是大写吗?他我本身是大写吗?不是,你看他这是不是又写了个大写,所以说这个文档真是。记住了,我们不用大写小写就行了。哎,这他写错了啊好,那这个下边大家看。还是告诉你这是模块对象,那么这标出来这个方法,这个方法统一都指的是我模块对象的方法。往下来看,其实有很多。我们要找一个。恭喜。看到这个没有ctrler,首先这是模块对象的方法,在这它需要传两个参数,第一个。名字。还记得我们之前要提前定义好科目。构造函数吗?哎,构造函数是不是有个名字啊,现在你得放到哪,放到这那后边contractor知道什么意思不。
12:07
构造器构造函数为什么可以利用它生成实例对象,就是因为它调用的是这种底层,是这个方法。那我们来写一下,它现在我这个模块对象是不是有了。他有一个方法叫。Controller在这个里边你就写了个名字,比如说我这先起一个。来个my controller吧。接下来就写个他就行了。那这个他说的是构造器,这个函说的作用和我们上一节课这个构造函数的作用是一模一样的。既然和他是一样的话,你不要忘了一个东西。你这是不是得去身为一个行参叫他,然后它会自动给你注入进来一个。哎,做预对象就到scope。
13:04
写完这些以后,我们来把页面去写一写,页面的话,它这儿就是输入框文本,输入框文本。来个input。接下来来个P标签,哎,这个是比如说员工名字。一吧,好。这肯定是表达式,这没问题,然后我再复制一份,这没问题吧。根据我们上节课所学的知识,大家说我应该怎么去写?你现在这儿我刷新一下,你是不是还是只有一个东西啊。一吧,那这个二和三和没有呢,你是不是得生成作用对象。怎么写,我们通常的写法是不是给他包个div全放进来,但是现在有个问题啊。写我先全放进来,全放进来,那这个时候NGCTRL,我们是不是要用这个指令,它要指向的是你这个构造函数的名字,现在这个名字在哪,在这。
14:13
把它是不放进来。就这样写,然后我去刷新一下啊。二审出来了。好,现在二出来以后,我能不能给他这个里边去添加属性,还有方法。这不是他会自动注入进来一个对象吗?比如说来个E啊,员工名字。来,科比。他这有了的话,那我当前的作用对象有了,我在我的范围下,能不能问他要这个数据,能不能和他关联的上。首先input这种我们用的是双向数据管定,是不是用的是NG model呀,这叫做EP内,这没有问题吧,那这两个表达式呢。
15:02
放他是吗?那这个呢。这个怎么放?用表达式还是指令?不知道怎么写啊。这是我们刚整过的东西吗?那我先这样写上,我们来看我刷新一下,首先数据有了,数据怎么来呢?是因为它和我当前的作业对象是不是关联上了,我数据是不是自动会流过来,这样的话,你乍一看是和上一面这个差不多。会写好这个,然后我去操作一个。有问题。有什么问题啊?首先你和我写好这个对比你少了一个三。然后这个板块你会发现这四个他们其实都是和同一个东西关联的。
16:02
也就是我操作一个的话,会影响其他的三个。而我之前写好的这个呢。它会影响下面的吗。那也是我们得想办法再去生成一个谁。你你这一步不就生成了002吗。你是不是还得再去生成一个另外一个作用对象?记住了,根作用对象只有一个,根下面的子作用对象可以有多个。这个应该好理解啊。现在二二胎政策都开放了,谁规定我这个就不能有多大?那也就是说如何再去生成一个呢?继续写,他的套路不是一样的吗?但是这个名字能不能和他一样?不能整个二。其他的东西用不用改,把这个改改。这没问题吧,V的。
17:01
那现在我问他这还是这样写吗?现在我NG controller生成的这个my controller这个作用对象。它的范围是不是这一个板块,而现在这个东西受人家的管辖。你得把它拿出来,放到自己的地盘下吧。怎么写?首先它二和三是父子关系吗?是不是兄弟关系啊?兄弟关系这不好写吗?你写个平行的不就完了吗?那现在首先你得先让他去生成一块区域。它要指向的是谁?是他吗?不是,我们下边是不是专门去生成的,是另外一个叫埋二的东西啊,现在是不是应该把它指向给他。现在人家有自己的一块区域了。既然有了自己的范围了,我是不是应该把这点东西拿到我这儿?
18:01
能懂吗?那我们现在来看一下。刷新。首先,数据初始化显示没有任何问题。那我们来看一下这个内存结构。这一把是不是多了个三啊,而且在我这个emp内嘛,是吧,分别在两个里面都有。那现在其实你操作一下肯定没什么问题。他俩各自不影响。能懂吗?59了,大家再坚持两分钟。真实的开发就是这样啊,先创建模块对象,再去生成作用对象,但是有没有发现这段代码有什么问题啊?我能不能去优化呢。马鞭的油啊。你最起码你能发现一些问题,这两个重复率太高了。
19:00
对不对,看着啊,我问他这一步是干嘛的。创建模块对象了,然后我们只不过是直接定义一个变量来接收它,然后继续调用我的方法,那我能不能直接去。点一个controller。肯定能。理解我的意思吗?我这儿只是换了一行,我如果不画行的话,应该是这样写。这样不是太长了吗?这没问题吧,换一行,我一听点它光标自动会停到这。我们现在要调用的方法其实就是它。能懂不,而且他这儿还有一个特点,它可以去劣势调用。列式调用,你们在解块二的时候肯定学过,结块二的一拉有一个特点,是不是就叫列式调用,还有读写二合一,之前给大家讲过吧。啊,列式掉,也就是意味着我接下来这一步我可以怎么写,咔,放到这儿。
20:03
能懂不?那这样的话不就是列式调用吗?来,我们先来看行不行啊,先把上面这个除掉。刷新。走你走你。这是肯定没问题。列式调用。既然可以,我问大家一个问题。当前CTRL方法返回值是什么?又可以滴什么?列式调用,你想既然能列式调用。那说明我这个函数记住了,这个合同上是不是也是一个方法,它调用完是不是肯定有返回值,而我继续能调用是肯定利用的是它的返回值。对不对。记住了,任何的函数调用都有返回值,如果说没有指令的话,它默认说返回的是安范的。
21:05
这个讲方法给大家。那现在的列式调用肯定不是案犯的,然后你再去分析CTRL这个方法是谁的方法。谁的方法?你他不知道,你看这一步就行,谁调用它就谁的方法。是不是就是。这个东西。模块对象啊。能懂吗?行,晚上能行,咱赶紧吃饭去吧。
我来说两句