配套资料,免费下载
链接:https://pan.baidu.com/s/1rbw78rR-VlkTyfkg2m6w3g
提取码:oz8a
复制这段内容后打开百度网盘手机App,操作更方便哦
AngularJS诞生于2009年,由Misko Hevery等人创建,后被Google所收购。AngularJS是一款优秀的前端JavaScript框架,已经被用于Google的多款产品当中。AngularJS有着诸多特性,最为核心的是:MVC、模块化、自动化双向数据绑定和依赖注入等等。AngularJS框架是为了克服HTML语言在构建App上天生的不足而设计的。AngularJS框架的内容非常庞大,涉及到WEB应用架构的各个方面。我们在这里学习的1.x版本,目的主要是为了改变我们的思想,由传统的页面开发转变为模块化App应用开发。
随着Angular版本的频繁推出,有必要了解下AngularJS、 Angular 2的区别。我们常说的Angular 1是指AngularJS,从Angular 2开始已经改名了,不再带有JS,只是单纯的Angular。Angular JS是一个典型的MVC架构(Model View Controller),而Angular 2是一个典型的基于组件架构(Component),从这一点上来说,它与 React.JS 结构相似。目前官方已将Angular 2和之前的版本AngularJS分开维护,所以说AngularJS和Angular 2是两个完全不一样的框架,基本上来说Angular 2以后的版本大多相似,目前Angular的最新版本为Angular 10,而AngularJS的最新版本为1.8.2,我们本教程所使用的也就是最新版本1.8.2,由于官方地址打开速度太慢,相对应的依赖文件,我会打包放到配套资料中,如需要请自行下载。当然,你还有更多选择,那就是引入AngularJS CDN文件。
官方下载:点击访问
源码地址:点击访问
深度拷贝对象并判断:
深度拷贝数组并判断:
对象迭代遍历:
数组迭代遍历:
3.1.1、ng-app
指令描述:AngularJS框架在使用的时候,除了需要引入框架文件之外,还需要为框架指明一个边界,告知框架在哪个范围内生效,这个时候我们就需要使用ng-app指令定义应用程序的根元素,习惯上写在html标签上,表示在当前页面中AngularJS都能正常使用。ng-app指令可以接收一个值,如果这个值为"",那么就不需要在script脚本中对应用初始化,一般来说,我们会指定这个值,这个值代表了当前正在开发应用的名称,一旦指定了这个值,就需要使用代码对当前应用进行初始化,具体的做法,请参考:
angular.module方法详解:
第一个参数:‘myapp’,对应ng-app中的值,代表了当前正在开发应用的名称,一般来说,这个应用名称在全局来看应该保持一致官网wps最新的下载的网址在哪里。第二个参数:[‘ngRoute’, ‘ngCookies’, ‘ngAnimate’],由于AngularJS将功能进行了拆分,这一点从框架文件的引入就可以看出来,这就使得开发者可以按需加载自己所需要的模块,这三个模块从左到右依次为:路由、存储、动画,如果您不需要这三个模块,可以将上边的三个scrip引入删除,第二个参数值为空[],但是,为了后边课程讲解的方便,我就把这三个模块提前导入了。
3.1.2、ng-init
指令描述:ng-init指令主要是在应用启动的时候,为AngularJS中的变量进行初始化,它还可以调用方法,以此来完成启动时,一些初始化功能的加载,ng-init指令并没有规定具体的摆放位置,但我们习惯上放在body标签上。ng-init指令中的变量不必写var,直接书写变量的名称和所对应的值即可,多个变量之间应该用分割开来,具体的做法,请参考:
要是想要把初始化的变量显示到页面中,我们可以使用可获取,中支持变量、字符串甚至表达式,具体的做法,请参考:
3.1.3、ng-bind
问题引入:前边我们讲了在页面中我们可以使用来获取变量的值,但是它存在一个问题,如果AngularJS加载速度慢,在使用获取变量显示到页面中的时候,会先出现、这样的代码,然后才会显示我们变量中存储的值,它的效果如下:
显示的效果我们大家也都看到了,这个体验着实不是很好,那有没有办法解决这个问题呢?答案是有的,那就需要用到ng-bind指令了。
指令描述:ng-bind指令的作用就是能够将AngularJS中的变量绑定到想要显示的标签之上,具体的做法,请参考:
3.1.4、ng-cloak
问题引入:前边我们说了使用显示变量值会存在代码闪烁的问题,我们可以使用ng-bind指令来解决,但是我非要使用来显示,并且不存在代码闪烁,那有没有办法解决这个问题呢?答案是有的,那就需要用到ng-cloak指令了。
指令描述:防止使用的时候出现代码闪烁的问题,具体的做法,请参考:
3.1.5、ng-non-bindable
问题引入:前边我们讲过了可以获取变量的值,那万一这个p标签中的数据就是而不是经过计算后的10,也就是让p标签里边的失效,那有没有办法解决这个问题呢?答案是有的,那就需要用到ng-non-bindable指令了。
指令描述:规定元素或子元素不能绑定数据,如不使用 AngularJS,具体的做法,请参考:
3.2.1、ng-model
问题引入:前边我们讲了ng-init指令,它可以用来初始化变量,现在我想要把文本框的值绑定到一个变量中,那有没 wps电脑版下载网址在哪有办法解决这个问题呢?答案是有的,那就需要用到ng-model指令了。
指令描述:AngularJS框架规定ng-model指令用来对input或textarea这类用于收集用户信息的标签进行数据绑定,具体的做法,请参考:
3.3.1、ng-controller
指令描述:ng-controller指令用来在页面中声明哪一个元素为控制器,使用了ng-controller指令就必须要在script标签中对控制器进行初始化,控制器主要是用来操作数据和视图,我们可以在控制器内部直接定义或修改变量,还可以定义方法等等,具体的做法,请参考:
*.controller方法详解:
第一个参数:‘mainController’,对应ng-controller中的值,代表当前需要控制的是页面中的哪个控制器。第二个参数:[服务列表, function (服务列表) { }],服务列表表示的是,在控制器中我们可以注入一些常用的服务,比如:、,,,,以及我们自定义的服务等等,在这里我们先了解即可,后边会有专门的章节来介绍服务。而函数,则代表操作数据和视图是在这个函数中进行的。
这里要注意一下,一个页面中,可以存在多个控制器,也就是说,我们可以把一个页面拆分为不同的模块,每一个模块都由一个专门的控制器来操作每个模块内的数据和视图,而且模块之间可以存在同名的变量,防止了变量名称冲突,这样的模块化开发是非常有利于我们团队合作开发的,具体的做法,请参考:
3.4.1、ng-click
指令描述:当用户触发元素上的鼠标单击事件的时候响应。
案例演示:当按钮被单击的时候,弹出信息框,提示”按钮被单击了“
3.4.2、ng-dblclick
指令描述:当用户触发元素上的鼠标双击事件的时候响应。
案例演示:当按钮被双击的时候,弹出信息框,提示”按钮被双击了“
3.4.3、ng-mousedown
指令描述:当用户触发元素上的鼠标左键按下事件的时候响应。
案例演示:当鼠标左键按下的时候,弹出信息框,提示”鼠标左键按下“
3.4.4、ng-mouseup
指令描述:当用户触发元素上的鼠标左键弹起事件的时候响应。
案例演示:当鼠标左键弹起的时候,弹出信息框,提示”鼠标左键弹起“
3.4.5、ng-mouseenter
指令描述:当鼠标进入指定元素的时候触发。
案例演示:创建两个div,当鼠标进入最外层div的时候,控制台输出“mouse enter“
3.4.6、ng-mouseleave
指令描述:当鼠标离开指定元素的时候触发。
案例演示:创建两个div,当鼠标离开最外层div的时候,控制台输出“mouse leave“
3.4.7、ng-mouseover
指令描述:当鼠标在指定元素上方的时候触发,包括在其子元素上方的时候也会触发官网wps的电脑版的下载的地址(wps下载地址是什么)。
案例演示:创建两个div,当鼠标在外层div上方的时候,控制台输出“mouse over“
3.4.8、ng-mousemove
指令描述:当鼠标在指定元素内移动的时候触发。
案例演示:创建一个div,当鼠标在div内移动的时候,控制台输出“mouse move“
3.5.1、ng-keypress
指令描述:当指定元素上的键盘按键时响应。
案例演示:创建一个文本框,当键盘按键时,输出文本框的内容到控制台
3.5.2、ng-keydown
指令描述:当指定元素上的键盘按键按下时响应。
案例演示:创建一个文本框,当键盘按键按下时,输出文本框的内容到控制台
3.5.3、ng-keyup
指令描述:当指定元素上的键盘按键松开时响应。
案例演示:创建一个文本框,当键盘按键松开时,输出文本框的内容到控制台
3.6.1、ng-focus
指令描述:当指定元素获取到焦点的时候触发。
案例演示:创建一个文本框,当文本框获取到焦点的时候,向控制台输出“文本框获取到焦点”
3.6.2、ng-blur
指令描述:当指定元素失去了焦点的时候触发。
案例演示:创建一个文本框,当文本框失去了焦点的时候,向控制台输出“文本框失去了焦点”
3.6.3、ng-change
指令描述:当指定元素的内容发生改变的时候触发。
案例演示:创建一个文本框,当文本框的内容发生改变的时候,向控制台输出“文本框内容改变了”
3.6.4、ng-copy
指令描述:当指定元素被复制的时候触发。
案例演示:创建一个文本框,当文本框的内容被复制的时候,向控制台输出“文本框内容被复制了”
3.6.5、ng-cut
指令描述:当指定元素被剪切的时候触发。
案例演示:创建一个文本框,当文本框的内容被剪切的时候,向控制台输出“文本框内容被剪切了”
3.6.6、ng-paste
指令描述:当指定元素被粘贴的时候触发。
案例演示:创建一个文本框,当文本框的内容被粘贴的时候,向控制台输出“文本框内容被粘贴了”
3.6.7、ng-submit
指令描述:当表单被提交的时候触发。
案例演示:当表单被提交的时候,弹出提示框,提示”表单被提交了“
3.7.1、ng-checked
指令描述:用于设置复选框(checkbox)或单选按钮(radio)的checked属性。
3.7.2、ng-selected
指令描述:用于设置下拉列表框的selected属性。
3.7.3、ng-readonly
指令描述:用于设置文本框是否只读。
3.7.4、ng-disabled
指令描述:用于设置表单控件是否禁用。
3.7.5、ng-value
指令描述:用于设置文本框的值。
3.7.6、ng-href
指令描述:用于设置a标签的href属性。
3.7.7、ng-src
指令描述:用于设置img标签的src属性。
3.7.8、ng-class
指令描述:用于设置标签的class属性。
这里再给出几种不同的写法,根据项目的需求来进行选择:
3.7.9、ng-style
指令描述:用于设置标签的style属性。
3.8.1、ng-repeat
指令描述:定义集合中每项数据的模板,例如:
案例演示1:把用户列表循环显示到页面表格中
官网的wps下载的网站在哪
案例演示2:把用户列表循环显示到页面表格中,并使用和实现隔行换色
案例演示3:把用户列表循环显示到页面表格中,并使用和实现隔行换色
3.8.2、ng-options
指令描述:用于循环生成select下拉选择框中的option。
案例演示1:环生成select下拉选择框中的option,要求被循环的对象是一个基本类型数组
案例演示2:环生成select下拉选择框中的option,要求被循环的对象是一个键值对象数组
案例演示3:环生成select下拉选择框中的option,要求被循环的对象是一个键值对象数组,并且要求按照其group字段进行分组
ng-options有以下格式的语法,仅供参考:
数据来自于数组:
label for value in arrayselect as label for value in arraylabel group by group for value in arrayselect as label group by group for value in array track by trackexpr
数据来自于对象:
label for (key , value) in objectselect as label for (key , value) in objectlabel group by group for (key, value) in objectselect as label group by group for (key, value) in ob
3.9.1、ng-hide
指令描述:隐藏或显示 HTML 元素,可设值为true|false。
3.9.2、ng-show
指令描述:显示或隐藏 HTML 元素,可设值为true|false。
3.9.3、ng-open
指令描述:指定元素的 open 属性,可设值为true|false,常与details等具展开效果的元素配合使用。
3.9.4、ng-if
指令描述:显示或移除 HTML 元素,可设值为true|false。
3.9.5、ng-switch
指令描述:ng-switch规定显示或隐藏子元素的条件,常与ng-switch-when配合使用,类似于switch和case。
3.10.1、ng-include
指令描述:在应用中包含 HTML 文件,但不能执行引入文件中的JavaScript代码。
语法格式:
参数解读:
指令名称:
指令名称必须采用小写,任何大写都会导致无效。如果是M类型,则replace字段就是必须写的,并且必须设置为true才能生效。 指令类型:
“A”,指的是attribute,意味着指令需要通过属性的方式使用,例如:“E”,指的是element,意味着指令需要通过元素的方式使用,例如:“C”,指的是class,意味着指令需要通过类名的方式使用,例如:“M”,指的是comment,意味着指令需要通过注释的方式使用,例如: 指令结构:
指令结构template指的是指令在页面中能够显示的html结构,如果需要从外部文件中加载指令的结构,则需要写成templateUrl。 指令复写:
指令复写指的是指令当在页面中存在时,是否会被当做是一个子元素添加到当前所在的元素内,如果设置为true,那么模版将会替换当前元素,而不是作为子元素添加到当前元素中。(注意:为true时,模版必须有一个根节点) 新作用域:
如果设置为true,将为这个directive创建一个新的scope。如果在同一个元素中有多个directive需要新的scope的话,它还是只会创建一个scope。新的作用域规则不适用于根模版,因此根模版往往会获得一个新的scope。如果设置为{},将创建一个新的、独立的scope。它与一般的scope的区别在于它不是通过原型继承于父scope的。这对于创建可复用的组件是很有帮助的,可以有效防止读取或者修改父级scope的数据。 link: 专门为自定义指令提供了一个用来编写对应脚本的区域。
scope:如果将整个指令看作是一个controller,那么scope的作用等价于$scope,在指令内部,需要对scope进行初始化,如果不进行初始化操作,那么scope默认为当前Controller中的$scope。element:一个包含了指令中所有页面元素的数组,每一个元素都是一个DOM对象,数组整体支持jQuery操作,而数组元素本身支持JavaScript原生操作。attrs:当前指令的属性集合,用来获取元素的属性。
案例演示:
AngularJS 路由允许我们在同一个页面中可以通过不同的 URL 访问不同的内容。也就是可以实现多视图的单页Web应用(single page web application,SPA)。
通常我们的URL形式为 ,但在单页Web应用中 AngularJS 通过 实现,例如:
当我们点击以上的任意一个链接时,向服务端请的地址都是一样的()。 因为 # 号之后的内容在向服务端请求时会被浏览器忽略掉。 AngularJS 路由就通过 帮助我们区分不同的逻辑页面并将不同的页面绑定到对应的控制器上。所以,我们就需要在客户端实现 # 号后面内容的功能实现。
注意:注意 Angular1.6 之前的版本是通过 实现路由,而在 Angular1.6 及之后的版本是通过 实现路由,为了解决版本不统一造成的路由不一致的问题,我们可以使用代码规定到底加不加,
载入了实现路由的JavaScript文件:angular-route.js。
包含了 ngRoute 模块作为主应用模块的依赖模块。
使用 ngView 指令,该 div 内的 HTML 内容会根据路由的变化而变化。
配置 , 用来定义路由规则,用来解决版本差异带来的路由不一致问题。
函数的第一个参数是 URL 或者 URL 正则规则,第二个参数为路由配置对象。
路由配置对象语法规则如下:
参数说明:
template: 如果我们只需要在 ng-view 中插入简单的 HTML 内容,则使用该参数:
templateUrl: 如果我们只需要在 ng-view 中插入 HTML 模板文件,则使用该参数:
controller: function、string或数组类型,在当前模板上执行的controller函数,生成新的scope。
controllerAs: string类型,为controller指定别名。
redirectTo: 重定向的地址。
resolve: 指定当前controller所依赖的其他模块。
本地存储是一个非常重要的功能,在AngularJS中,我们使用ngCookies来解决存储问题。
载入了实现存储的JavaScript文件:angular-cookies.js。
包含了 ngCookies 模块作为主应用模块的依赖模块。
在controller中的使用。
提供了四个主要操作cookie的方法,这四个方法分别是:get、getAll、getObject、put、putObject、remove方法,分别对应cookie操作的获取、获取全部、获取对象、设置、设置对象、移除等操作。
AngularJS 提供了动画效果,可以配合 CSS 使用,ngAnimate模块可以添加或移除 class 。ngAnimate模块本身并不能使 HTML 元素产生动画,但是ngAnimate模块会监听事件,如果有类似隐藏显示HTML元素的事件发生,如ngAnimate模块就会使用预定义的 class 来设置HTML元素的动画。那么支持这种方式定义动画的指令有哪些?如下所示:
和 指令用于添加或移除 class 的值。
其它指令会在进入 DOM 会添加 类,移除 DOM 会添加 属性。
当 HTML 元素位置改变时, 指令同样可以添加 类 。
此外,在动画完成后,HTML 元素的类集合将被移除。
例如: 指令会添加以下类:
(如果元素将隐藏) (如果元素将显示) (如果元素将隐藏) (如果元素将显示)
我们可以使用 CSS transition(过渡) 或 CSS 动画让 HTML 元素产生动画效果,我们这里做的额外工作只是编写css文件。只编写样式就可以了?实际上,服务本身支持几个内置的指令,比如,,等。而它的本质只是为其在视图变化期间添加了额外的CSS样式,仅此而已!
载入了实现动画的JavaScript文件:angular-animate.js。
包含了 ngAnimate 模块作为主应用模块的依赖模块。
根据业务需求,编写对应的样式类即可。
为了让大家的体会更加深刻,我特意把去掉,把注入的ngAnimate模块取消,让大家看看效果,对比一下!
在 AngularJS 中,服务是一个函数或对象,可在你的 AngularJS 应用中直接使用,AngularJS 内建了30 多个服务。如常见的、,,,,等。甚至我们可以自定义属于我们自己的服务,自定义服务的目的在于定义一些公共方法,实现便捷开发以及代码重用。自定义服务常用于在控制器中,除此之外,还能用在过滤器中。
7.2.1、$scope
服务描述:是控制器级别的作用域服务,每一个控制器中都存在一个,它们之间互不干扰,的主要作用就是用来搭建HTML (视图)和 JavaScript (控制器)之间的桥梁,打个比方:我们在AngularJS中可以定义、添加以及修改一些变量,但是,我们要想在页面中显示出来,就必须先要把这些变量存放到中,然后,页面在取的时候就会默认去当前控制器下的里找。当你在 AngularJS 创建控制器时,你可以将对象当作一个参数传递,这样在当前控制器控制的视图HTML (视图)里可以获取了中所有的属性和方法,在视图中,你不需要添加前缀,只需要写属性名即可,如: 。
案例演示:
7.2.2、$rootScope
服务描述:之前我们介绍了控制器级别的作用域服务,但是,这种控制器级别的作用域并不跨控制器,现在大家试想一下,比如,我有两个控制器,我想在控制器1中处理数据,但是,我要把数据显示到控制器2所管理的视图中,我该怎么办,好像就没有用了,这时候就需要到应用级的作用域服务了,作用域服务在每一个控制器中都能访问到。
案例演示:
服务描述:$watch虽然我们称之为监听服务,但实际上这个服务并不需要我们主动注入,而是可以在任何时刻,在控制器中任何位置直接使用它。它的作用是监听任何想要监听的变量的值,并在这个值发生变化的时候回调。
语法描述:
案例演示:
服务描述:服务主要用于分析浏览器地址栏中的URL(基于window.location),它让我们可以在应用中较为方便地使用URL官网wps的电脑版的下载入口是多少(wps最新电脑版本安装包)。在地址栏中更改URL,会响应到服务中,而在中修改URL,也会响应到地址栏中。
常用方法:
:跳转到指定的地址
:用于指定?后边的参数
:跳转到指定地址,并且指定查询参数
:获取浏览器当前页面的完整地址
7.5.1、内置的过滤服务
服务在AngularJS框架中是对数据进行转换显示的一种小工具,使用本服务能够让页面中的显示内容呈现为不一样的结构,虽然是系统服务,但是支持自定义内容,在服务中共计提供了五种内置过滤器服务。
7.5.1.1、currency
服务介绍:该服务可在页面中直接使用,不需要额外的注入操作,它的作用是用于将内容转换为货币格式,默认转换为美元格式。
案例演示:
7.5.1.2、lowercase
服务介绍:该服务可在页面中直接使用,不需要额外的注入操作,它的作用是用于将内容转换为小写格式,只支持英文单词。
案例演示:
7.5.1.3、uppercase
服务介绍:该服务可在页面中直接使用,不需要额外的注入操作,它的作用是用于将内容转换为大写格式,只支持英文单词。
案例演示:
7.5.1.4、orderBy
服务介绍:该服务可在页面中直接使用,不需要额外的注入操作,用于根据表达式的值对显示的内容进行顺序排列,一般会用于ng-repeat结构中,并且repeat结构不是简单数据结构。
案例演示:
7.5.1.5、filter
服务介绍:该服务可在页面中直接使用,不需要额外的注入操作,用于从一个数组选项中筛选出符合要求的子集数组,类似于输入提示功能。
案例演示:
7.5.2、自定义过滤服务
7.5.2.1、语法介绍
直接对app页面数据模型,通过.filter()方法进行扩展,即可在页面中直接使用,不需要额外的注入操作。
语法描述:
7.5.2.2、prefix
7.5.2.3、suffix
7.5.2.4、trustHtml
wps电脑版下载的地方是什么
服务描述:是 AngularJS 中的一个核心服务,用于读取远程服务器的数据。
通用格式:
简写格式:
其它简写:
$http.get$http.post$http.put$http.delete$http.jsonp$http.head$http.patch
在使用jsonp请求时,还需要为请求地址设置白名单才会请求成功:
有时候服务端会要求请求会自带特定头信息,可通过下面代码实现:
如果要实现文件上传,我们需要这样设置:
7.7.1、$interval
服务介绍:间隔调用服务,每间隔一段时间调用一次。
案例演示:
7.7.2、$timeout
服务名称:延迟调用服务,延迟一段时间后调用一次。
案例演示:
服务描述:当多个控制器中存在大量相同或者重复的代码,我们可以把这些代码,单独抽成一个公共基础的控制器,然后分别在其他控制器中将这个公共基础的控制器中的作用域分别复制到每一个注入后的控制器中,这样就实现了一种控制器继承的关系。
案例演示:
系统服务是系统直接提供的,有不同的功能,angularJS中的服务实际上就是对app数据模型的扩展,从某种意义上可以理解为服务就是全局变量的含义,自定义服务需要手动编辑功能,但两者都需要注入之后才能使用,特殊的服务不需要注入,例如:、。自定义服务的方式常见有五种:value服务、constant服务、factory服务、service服务、provider服务,无论哪一种自定义服务,它们的目的基本都是一致的,就是提供一个全局变量,来支持Controller之间的交流。
7.9.1、value服务
服务描述:value服务是通过.value()方法对app数据模型进行扩展的一种服务定制方式,通过对app进行扩展,可以使得服务在controller之间进行信息交换,充当“全局变量”的角色,value服务实际上就是一个全局变量,所以,可以随意的对其内容进行读取和修改。
语法描述:
案例演示:
7.9.2、constant服务
服务描述:constant服务可以认为从作用上完全等价于value服务,区别就是constant服务一旦被定制完成,那么在注入使用之前都是不能更改的,多次定制constant服务,只有第一个生效。
语法描述:
案例演示:
7.9.3、factory服务
服务描述:factory服务是通过.factory()方法去创建一个object结构并直接返回的操作。乍一看返回一个对象和直接value式提供一个对象并无区别,但是通过函数返回一个对象,那么这个对象的所有结构就都是在函数内完成,而函数内是可以对对象进行任意的操作和扩充的,但是在value式固定结构中却无法做到。
语法描述:
案例演示:
7.9.4、service服务
服务描述:service服务相当于本身已经构建了一个空白对象,在服务内部所有内容的操作均通过this.来完成。这个自定义服务是我们今后使用最多的一个,请大家务必要注意!
语法描述:
案例演示:
7.8.5、provider服务
服务描述:provider服务通过.provider()方法添加,并在第二个参数的函数内通过this.$get = function (){…}的固定结构对服务内容进行扩充,provider服务只要被创建,就会直接添加到app当中,无论是否对controller进行注入,provider服务都会一直存在,其余四种自定义服务都不能做到这点。
语法描述:
案例演示:
wps的的官网最新的下载的地方在哪里