《AngularJS高级程序设计》学习笔记
一、AngularJS应用剖析
AngularJS存在一些最主要的构件,如模型,视图和控制器。但AngularJS中也有许多其他可供灵活使用的部件,包括模块,指令,过滤器,工厂和服务。
一 . 1 依赖注入
没有依赖注入(dependencies injector),就不得不以某种方式找到自己所需要的组件,很可能得使用到全局变量。虽然这样子也能工作,但是不如AngularJS的依赖注入来的简单。依赖注入,可以通过让某个组件的工厂函数的参数上声明依赖来实现,这个函数使用参数来提出需求: "Hey! AngularJS兄弟,我需要这样子的一个构件!"
app.controller("HelloController", function($scope, $timeout){
//hey, AngularJS 我需要$scope,和$timeout
//为了我能正常运行,麻烦你先把这两个构件帮我准备一下吧!
})
依赖注入的主要好处是AngularJS辅助管理组件,并在需要时提供给相应的函数。依赖注入还为测试带来好处。
一 . 2 工人和工人函数
简单的概念:AngularJS在需要建立构件时将调用工厂函数,当需要使用该构件时就会调用工人。相当于,工厂函数是模具,工人则是通过这个模具制造出来的实体。工厂函数负责创建那些来执行工作的对象,工厂函数往往会返回一个工人函数。下面的这个例子中,第一个function便是工厂函数,return的内容则是一个工人(对象实例)。
app.directive("Hello", function(){
return function(scope, ele, attrs){
//....
}
})
一 . 3 . 1 使用模块工作
随着应用程序随着时间的推移会变得复杂,因此我们需要使用模块来使我们对程序进行更有效、编辑的管理测试和工作。模块具有三种主要角色:1. 将一个AngularJS程序与HTML文档中的一部分进行关联(ng-app作用范围)。2. 帮助我们组织AngularJS应用程序中的代码和组件
var app = angular.module("myApp", ["app.Controllers", "app.Filters", "app.Servers", "app.Directive"]);
...
其中,这些依赖并不是必须按照某种特定的顺序定义的。但是AngularJS会保证这些具有依赖的模块(此处的app模块)会首先调用其(app模块)所依赖("app.Controllers", "app.Filters", "app.Servers", "app.Directive")的回调函数。相当于,有个哥们想自己组装一部四驱车,那他会把轮子,车身,电池什么的先给准备好。
一 . 3. 2 config与run
config方法会接受一个函数,这个函数会在相应模块被调用之后被调用。config方法常常会通过注入其他服务的值的方式来配置模块
app.config(function($httpProvider){
//...
})
run方法也会接受一个函数,但是该函数之会在所有模块都加载完以及解析完它们的依赖之后才会被调用
app.run(function($rootScope){
//...
])
执行顺序——一个例子
App.Servives模块的config回调函数
App模块的config回调函数
App.Servives模块的run回调函数
App模块的run回调函数
二、AngularJS指令系统
二、1 数据绑定类指令
数据绑定类指令是负责执行数据绑定的,数据绑定是使用模型中的值并将它插入到HTML文档中。
1. ng-bind-template 大家都知道ng-bind会替换它被用到的元素内容,而且ng-bind受限于只能处理单个数据绑定的表达式 <span ng-bind="bool"></span,
当需要进行创造多个数据绑定便可以使用灵活的ng-bind-template
<div ng-bind-template="First: {{my.mum}} and {{my.dad}}">
2. ng-non-bindable 阻止内联数据绑定
AngularJS不是说唯一使用{{ }}符号的JavaScript包,因此如果同时使用多个库可能会遇到问题,或者我仅仅是想输出"{{ }}"这个符合。AngularJS在请求绑定到一个不存在的模型属性时不会报错。例如 AngularJS uses {{ and }} characters for tempalte 会被替换成 AngularJS uses characters for tempalte ,因此使用ng-non-bindable可以为我们解决这个问题,以下实例会输出 AngularJS uses {{ and }} characters for tempalte
<div ng-non-bindable>
AngularJS uses {{ and }} characters for tempalte
</div>
二、2 模板类指令
1. ng-repeat
<li ng-repeat="(key, value) in item">
{{key}} = {{value}}
</li>
当遍历目标是对象时, key为当前属性名,value为对象属性的值。而当遍历目标是集合(如一个数组)时, key为当前的遍历下标(从0开始),value为集合的值
ng-repeat的内置变量
$index: 返回当前的遍历下标
$first/$last: 若当前对象时遍历集合的第一/最后一个元素,则返回true
$even/$odd: 若当前对象时遍历集合的第偶数个/第奇数个元素,则返回true
$middle: 若当前对象时遍历集合的中间元素(不是第一或者最后一个元素),则返回true
ng-repeat + ng-if
我们无法再ng-repeat指令所应用到的同一个元素上使用ng-if <li ng-repeat="item in Objs" ng-if="item.exist">{{item.name}}</li> 这样子会报错。我们应该先把数据通过filter服务整合出来后,再用ng-repeat遍历访问 <li ng-repeat="item in Objs | filter: {exist: 'true'}" >{{item.name}}</li>
2. ng-include
<ng-include src=" 'template.html' "></ng-include> 请注意,此处有坑,双引号里面还有一个单引号。
ng-include的配置参数
src: 指定加载内容的URL;onload: 指定一内容被加载后调用的计算表达式;autoscroll: 指定内容被加载时,是否滚动到这部分视图所在区域(注:小鹏我在实验时发现这个配置参数并没有运行..不知道是不是哪里引用错误了)
ng-include VS ng-switch
ng-switch适合用于复杂度不高,内容较小的时候使用。ng-include适用于复杂性较大,内容较多的页面,但首次加载时,AngularJS会使用ajax来请求模板,因此会有延迟。
二、3 事件类指令
我们可以通过分辨发事件对象中event.type属性,来处理在发生同一元素上不同的事件<li ng-repeat="item in items" ng-mouseenter="handle($event)" ng-mouseleave="handle($event)"> 。但是应该注意:AngularJS为事件指令所用的事件名称和底层事件的type属性之间存在不匹配的情况。例如 ng-mouseenter="handle($event)" 但他的 event.type == "mouseover" 。因此,我们在处理此类情况情况时,应当先确认事件的底层名称。
$scope.handle(event){
console.log(event.type)
}
二、4 布尔属性类指令
ng-check 管理checked属性(input="checkbox")
ng-diabled 管理disabled属性(input与button元素)
ng-open 管理open属性(detail元素)
ng-readonly 管理readonly属性(input元素)
ng-selected 管理selectes属性(option元素)
资料参考:
《AngularJS高级程序设计》
《AngularJS高级程序设计》学习笔记的更多相关文章
- js学习笔记:webpack基础入门(一)
之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...
- PHP-自定义模板-学习笔记
1. 开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2. 整体架构图 ...
- PHP-会员登录与注册例子解析-学习笔记
1.开始 最近开始学习李炎恢老师的<PHP第二季度视频>中的“章节5:使用OOP注册会员”,做一个学习笔记,通过绘制基本页面流程和UML类图,来对加深理解. 2.基本页面流程 3.通过UM ...
- 2014年暑假c#学习笔记目录
2014年暑假c#学习笔记 一.C#编程基础 1. c#编程基础之枚举 2. c#编程基础之函数可变参数 3. c#编程基础之字符串基础 4. c#编程基础之字符串函数 5.c#编程基础之ref.ou ...
- JAVA GUI编程学习笔记目录
2014年暑假JAVA GUI编程学习笔记目录 1.JAVA之GUI编程概述 2.JAVA之GUI编程布局 3.JAVA之GUI编程Frame窗口 4.JAVA之GUI编程事件监听机制 5.JAVA之 ...
- seaJs学习笔记2 – seaJs组建库的使用
原文地址:seaJs学习笔记2 – seaJs组建库的使用 我觉得学习新东西并不是会使用它就够了的,会使用仅仅代表你看懂了,理解了,二不代表你深入了,彻悟了它的精髓. 所以不断的学习将是源源不断. 最 ...
- CSS学习笔记
CSS学习笔记 2016年12月15日整理 CSS基础 Chapter1 在console输入escape("宋体") ENTER 就会出现unicode编码 显示"%u ...
- HTML学习笔记
HTML学习笔记 2016年12月15日整理 Chapter1 URL(scheme://host.domain:port/path/filename) scheme: 定义因特网服务的类型,常见的为 ...
- DirectX Graphics Infrastructure(DXGI):最佳范例 学习笔记
今天要学习的这篇文章写的算是比较早的了,大概在DX11时代就写好了,当时龙书11版看得很潦草,并没有注意这篇文章,现在看12,觉得是跳不过去的一篇文章,地址如下: https://msdn.micro ...
- ucos实时操作系统学习笔记——任务间通信(消息)
ucos另一种任务间通信的机制是消息(mbox),个人感觉是它是queue中只有一个信息的特殊情况,从代码中可以很清楚的看到,因为之前有关于queue的学习笔记,所以一并讲一下mbox.为什么有了qu ...
随机推荐
- HTML5使用Div标签来实现表格
当支持HTML5时,我们可以使用样式把DIV实现一个表格table. 关键样式语法:display: table,display: table-row,display: table-cell 下面例子 ...
- iOS版本比较方法
之前一直把版本号转换为floatValue,但是最近在项目中又出现了float的问题,主要是 NSString表示为@"17.30",转换为floatValue 值为17.2999 ...
- MySQL Workbench gnome-keyring-daemon错误的解决
在Fedora下安装了一个MySQL Workbench,运行,连接数据库,在Store in Keychain时出现了gnome-keyring-daemon错误,不能保存密码,也就连不上数据库. ...
- MySQL Cursor
MySQL Cursor Summary: in this tutorial, you will learn how to use MySQL cursor in stored procedures ...
- 实现在Android 进程和线程
进程和线程 如果某个应用程序组件是第一次被启动,且这时应用程序也没有其他组件在运行,则Android系统会为应用程序创建一个包含单个线程的linux进程.默认情况下,同一个应用程序的所有组件都运行在同 ...
- Structs2动态方法调用
第一种:指定Method属性(Action比较多) <!-- 声明包 --> <package name="user" extends="struts- ...
- Scalaz(43)- 总结 :FP就是实用的编程模式
完成了对Free Monad这部分内容的学习了解后,心头豁然开朗,存在心里对FP的疑虑也一扫而光.之前也抱着跟大多数人一样的主观概念,认为FP只适合学术性探讨.缺乏实际应用.运行效率低,很难发展成现实 ...
- [moka同学笔记]三、Yii2.0课程笔记(魏曦老师教程)关联字段增加搜索
关联字段增加搜索 post表关联adminuser表,通过post.author_id adminuser.id关联,在YII2.0生成搜索,关联字段搜索时,需要输入关联字段author的id才能搜 ...
- 修改windows系统文件权限
修改windows系统文件总是提示没有权限,虽然已是administrator也不管用. 以下方法可以解决: 右键属性,安全,高级,所有者,编辑,选择当前用户并确定, 回到上一页再确定, 然后在安全页 ...
- asp.net mvc4 使用 System.Web.Optimization 对javascript和style的引入、代码合并和压缩的优化(ScriptBundle,StyleBundle,Bundling and Minification )
Bundling and Minification两个单词对今天的内容有个比较好的总结. 问题所在 一. 在asp.net包括mvc项目中,引入js和css也许有人认为是个很容易和很简单操作的事情,v ...