00:01
这节课呢,咱们来看啊,第四个就是我们模块化规范里面,嗯。第二种叫AMD,那么AMD这个呢,我们先来看一下这,哎这有一个规范,好这边呢有一个说明啊,首先我们要知道这句话啊,AMD这种模块化规范,它专门用于浏览器端。而在浏览器段啊,模块加载是异步的,一点问题没有,如果说你是同步的话,还是会阻塞诶。导致出现一些问题,所以呢,它采用的是异步加载的方式。那么我们先来说一下这个AMD这个规范其实是比com GS的这个浏览器端的实现要早。是CGS先出的是就是基于服务器端的。然后大家发现很好用。AMD这这边一看,哎,市场上没有专门针对浏览器端的这样一种规范,所以他出了一种。
01:00
那他出完以后,他们这一看,哎不行啊,浏览器端你整我也能整,然后他才后续才支持浏览器端的实现。好,来看一下AMD的基本语法,哎,两个,一个是如何去定义以及暴露模块,然后呢,如何引入模块。我们先把这个定义暴露模块这个打开,先来看上面这一种。我们定义模块都采用的是def DeFine它是一个方法。单词就是定义的意思,那如果说你定义的是没有依赖的模块,那么你只需要直接在里面写一个方程就行了。而这个相当于就是定义了个模块,里面所有的内容都是私有的。你模块写完以后,最终想要向外暴露一些API,如何去暴露呢?通过return去暴露模块。好,下面这个板块说的是如何定义一个有依赖的板块。
02:05
当你定义一个有依赖的模块的时候,你这个在范里边传入的参数就变成两个了。第一个参数必须是一个数组。这个数组里边放置的就是说我们要依赖的模块。注意了,它是不是以字符串的形式拿过来的。为什么是数组呢?是因为我当前的模块很有可能依赖于其他好几个模块。所以整合成数组。哎,数组这有了以后,第二个参数和上面这个功能一样,就是写一个参数。而这个函数里边的东西还是我们的模块。但是这个函数现在要有一个行参。为什么要有这个行差呢?你前面依赖的模块一旦声明了以后,他会一一对应的把模块对象给你注入进来。然后呢,我们通过呃,这种方式呢,就可以在模块内部去使用我依赖的模块。
03:04
这种方式其实咱们见过。对,安德拉那边。这叫什么方式呢?首先,你当前的模块也是一个依赖对象。然后他是不是以行参的形式被注入进来的。并且我是不是提前声明好了,这个我要依赖于他。只要注入他。大家想一下,这个全称叫什么?就写是声明依赖注入。首先我们讲依赖注入这一块,我们讲的是声明是依赖注入,而我们讲安格拉的时候,当初讲啊,我们最终要处理一个压缩GS文件的问题。那个时候是吧,用前面这个来解决,来用它来代替后边这个行差,哎叫显示声明依赖注入。这是定义以及包括模块的语法。
04:02
那下面看如何去引入它。引入的时候你得使用require,注意它也是一个方法。有的人呢,用require,你还会看到一种叫require GS。两个都行,待会儿我们能看到它引入的时候也是两个参数,而这一步操作通常呢,是放在我们的主模块,就像我们刚刚学完的common GS一样,最终它是不是这块都放到主模块汇集过来。这个也是。那在这第一个还是要引入的模块第二次函数,哎,它们是一一对应的关系。因为我现在已经是主模块了,所以我在这儿其实不用暴露了,你直接去使用其他的模块就OK了。好,这呢是它的基本语法,那我们来看一下它它的实现。
05:00
你AMD这个规范是需要依赖于库的,这个库就叫require JS。下面呢,这些网址呢,也给大家列出来了啊,两个都可以去看一下,这个是它的光芒。我呢,先去访问一下他。这个。先让他访问着,访问的同时呢,我们来到我们的这个里面。这一节课,我们来看这个名次。首先先来看零四里面分为两部分,一部分我这写的叫no AMD,一个是require GS,也就我咱们先来整一下上面这一个。我先去用用一下模块化这种规范,但是我不用AMD,就是没有任何的模块化规范,我们自己来写在这个下面,我去创建一个GS。我就删了他。来什么来消息了?好,创建一个GS文件。
06:01
而这个GS文件呢,我在这个下面我去创建,比如说呃,就。A吧,这JS就给它起个名字,然后呢,我再去创建一个文件叫。啊。Service。好,现在这有两个GS文件,又叫两个GS模块,那么按照我们以前的写法,我们现在这去啊,定义一个没有依赖的模块。那你说我们应该怎么写?就你现在就是没有任何的模块化规范这种语法,根据我们之前的想法来说,我模块化的其实是不是立即执行函数呀。不就写他吗?然后我们可以在里面去写,你比如说我这儿先来一个哎,Name。然后来一个这个name的名字呢,我就叫它data,哎,Service。
07:04
点G,我定一个字符串,那接下来我们来一个function,比方叫get。那那在这我去了一个。内容可以不?就相当于当将当前模块里边这个数据是不是返出去啊。然后不要忘了你这个模块要和其他的模块进行通信。我是不是要往出暴露这个API,暴露这个方法。暴,我们这上来就行了,暴露的方式什么,传个温度,然后呢,我们在这去声明一下,最终暴露,哎,我就可以这样去写。比如说这把我这个模块的名字,我就叫它data service,我让它等于它。叫能看懂吗?给温饱里面添加了一个属性,这个属性对应的值是一个对象,而这个对象里面我给他放了一个方法,是不是就是咱们定义的get内吗?
08:06
好了,现在这个data service我们定义完了,那来到alert,我呢在这写定义一个啊,有依赖的模块。好,先把基本的写好,来个它,那这个时候我应该怎么写呢?你比如说我先去let me,等于一个A。点GS表示我当前的模块,那接下来我再来一个函数,比如说这这一版我来一个半。来一个伴,我们去conso这个message。这没问题。好,然后我在这先去传一个温进来,这个温度传进来,我最终是不是想的是把这个方法我得暴露出去啊。这没问题吧,温点alert就起这个名字,等于一个这一把,哎,我这别用bar了,形象一点叫收。
09:05
Message。好,那这个时候我是不是可以把这个放进来啊。接下来我们说了,它是一个有依赖的模块,我让他去依赖于这个data service。依赖于贝塔,那我们应该怎么写?贝塔service最终暴露的这个属性是不是叫它啊,这是模块的名字,相当于那这个时候我可以这样去写。然后呢,我们在我看哎,我放到哪了,这是。不应该是在这吗?这data service,我应该是把这个模块是不是放到aler这在这来走,你在这去申明一下,Data service它是一个对象,里边是不是有个方法,一旦调用我能拿到一串啊。
10:01
那我就可以这样写。Data service点调用。这能看懂我要干嘛吧?我意思让控制台把这个和这个字串都给我输出来。啊好,那现在两个模块有了,我呢,再去GS下外边啊,在我的最外边,我再去定一个,比如说APP点,用它来表示我的主模块。那么主模块现在它是最终要汇集的地方,它不需要向外暴露,只需要把其他的模块是不是引入过来啊。那这个时候我首先我得引入一个模块名叫。Alert。声明一下,现在我只需要做的是A点,它是不是有个so已经调用了。一旦调用的话,这个log是不是就执行。那我问一下大家,我需不需要在这里面引入这个data service这个模块?
11:04
这个模块你要知道它在哪用,是不是在alert里面用啊,那也就我在主模块只需要引入aler就OK了。当你解析到another模块的时候,他肯定要读里面的代码吧,那里面的是不是他从这开始去找。好,现在这有三个GS文件。我现在在这儿不使用AMD规范,我怎么办呢?我是不是现在引入啊。我们现在要考虑引入所当前路线,你比如说我引入个app.js我问一下大家我这样运行有什么问题。行不行吧,先说。那我们先来看一下啊,有同学说不行。肯定不行。为什么他说alert is not fine?有的同学可能说了,我aler不是已经暴露了问题,娟。现在请问我在我当前的浏览器页面,你的GS我有去读过吗?
12:04
我当前的页面就拿不到你的GS。能理解吗?那这个时候怎么办?引入,我在这儿引入行不行。哎,你得知道我abp GS里面是不是要依赖于你AGS啊,那这个时候应该是GS下面的AGS。够吗?不够是因为什么?你的lot GS里面,你是不是还要依赖一个叫service的东西?注意了,我这data service虽然说在这给window添加了,但是我当前这个文件没有人去解析呢,你是不是得在这引提前引用进来才能去加载。所以你在A之前,你得引入这个data service点。Jazz。这个大家能理解吗?
13:00
然后现在我再去刷新一下,是不是就能输出了。哎,甚至说我们在没有模块化规范的时候,我们自己设计就是这样设计。但是最终带来的问题是不是说我们需要发三次请求,而且这个依赖关系你千万不能搞错。搞错的话,是不是肯定会出错啊。好。
我来说两句