AngularJs学习笔记-AngularJS权威教程学习笔记
AngularJS是什么?
AngularJS是一种构建动态Web应用的结构化框架.主要用于构建单页面Web应用, 增加抽象级别,使构建交互式的现代Web应用变得更加简单。
AngularJS使开发Web应用变得非常简单,同时也降低了构建复杂应用的难度。它提供了开发者在现代Web应用中经常要用到的一系列高级功能,例如:
解耦应用逻辑、数据模型和视图;
Ajax服务;
依赖注入;
浏览历史(使书签和前进、后退按钮能够像在普通Web应用中一样工作);
测试;
更多功能...
我们可以在AngularJS应用的模板中使用多种标记,包括下面这些。
指令:将DOM元素增强为可复用的DOM组件的属性或元素。
值绑定:模板语法{{ }}可以将表达式绑定到视图上。
过滤器:可以在视图中使用的函数,用来进行格式化。
表单控件:用来检验用户输入的控件。
1.ng-app和ng-model数据绑定
知识要点:1).ng-app是一个指令,声明所有被它包含的元素都属于AngularJS 应用,不一定要在html根上,也可以在子dom<br />
2).input ng-model="name" 数据模型<br />
3).使用 2个花括号花括号ng-model的属性名 绑定数据
当客户端的数据模型发生变化时,视图就能反映出这些变化,并且不需要写任何自定义的代码,它就可以工作。
<!DOCTYPE html>
<html ng-app>
<head>
<script src="scripts/angular.min.js"></script>
</head>
<body>
<input ng-model="name" type="text" placeholder="Your name">
<h1>Hello {{ name }}</h1>
</body>
</html>
2.ng-controller
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" ng-app>
<head>
<title></title>
<script src="scripts/angular.min.js"></script>
<script type="text/javascript">
//刚开始学习,我们把控制器的代码写到了一个在全局命名空间中定义的函数里
function MyController($scope) {
var updateScopeClock = function () {
$scope.myclock = new Date();
}
updateScopeClock();
}; function MyController2($scope, $timeout) {
var updateScopeClock = function () {
$scope.myclock = new Date();
$timeout(function () { updateScopeClock() }, 1000);
}
updateScopeClock();
};
//如果对象有多个属性,更新对象某个属性的值,而不是整个对象,这样更好。在这个例子中,相比每秒钟都更新$scope.clock,更新clock.now的值会是更好的选择。
function MyController3($scope) {
$scope.myclock = { nowTime: new Date(), timezone: "China" };
var updateClock = function () {
$scope.myclock.now = new Date();
};
//每一秒调用一次$scope.$apply(updateClock),每秒执行一次updateClock方法,每次更新一下属性的值
setInterval(function () {
$scope.$apply(updateClock);
}, 1000);
updateClock();
}
</script>
</head>
<body>
<p>
正如ng-app 声明所有被它包含的元素都属于AngularJS 应用一样,DOM元素上的
ng-controller声明所有被它包含的元素都属于某个控制器。
</p>
<p></p>
MyController demo,这里绑定的是MyController的myclock:
<div ng-controller="MyController">
<h5>{{ myclock }}</h5>
</div>
<p></p>
MyController2 demo,这里绑定的是MyController2的myclock:
<div ng-controller="MyController2">
<h5>{{ myclock }}</h5>
</div>
<p></p>
MyController3 demo,这里绑定的是MyController3的myclock:
<div ng-controller="MyController3">
<h5>{{myclock.nowTime}}</h5>
</div>
</body>
</html>
3.模块
在JavaScript中,将函数代码全部都定义在全局命名空间中绝对不是什么好主意,这样做会导致冲突从而使调试变得非常困难,浪费宝贵的开发时间。
生产环境中的控制器代码,一般封装在一个我们称之为模块(module)的单元内。
在AngularJS中,模块是定义应用的最主要方式。模块包含了主要的应用代码。一个应用可
以包含多个模块,每一个模块都包含了定义具体功能的代码。
使用模块能给我们带来许多好处,比如:
保持全局命名空间的清洁;
编写测试代码更容易,并能保持其清洁,以便更容易找到互相隔离的功能;
易于在不同应用间复用代码;
使应用能够以任意顺序加载代码的各个部分。
AngularJS允许我们使用angular.module()方法来声明模块,这个方法能够接受两个参数,
第一个是模块的名称,第二个是依赖列表,也就是可以被注入到模块中的对象列表。
angular.module('myApp', []);
这个方法相当于AngularJS模块的setter方法,是用来定义模块的。
调用这个方法时如果只传递一个参数,就可以用它来引用模块。例如,可以通过以下代码来引用myApp模块:
// 这个方法用于获取应用
angular.module('myApp')
开发大型应用时,我们会创建多个模块来承载业务逻辑。将复杂的功能分割成不同的模块,有助于单独为它们编写测试。
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
<script src="scripts/angular.min.js"></script>
<script type="text/javascript">
var myModule = angular.module('myModule', []);
myModule.run(function ($rootScope) {
$rootScope.name = "World";
});
</script>
</head>
<body>
<div ng-app="myModule">
Hi {{name}}
</div>
</body>
</html>
4.作用域
作用域(scope)①是构成AngularJS应用的核心基础,在整个框架中都被广泛使用,因此了解它如何工作是非常重要的。
$scope对象在AngularJS中充当数据模型,但与传统的数据模型不一样,$scope并不负责处理和操作数据,它只是视图和HTML之间的桥梁,它是视图和控制器之间的胶水。。在应用将视图渲染并呈献给用户之前,视图中的模板会和作用域进行连接,然后应用会对DOM进行设置以便将属性变化通知给AngularJS。
作用域提供了监视数据模型变化的能力。它允许开发者使用其中的apply机制,将数据模型的变化在整个应用范围内进行通知。我们在作用域的上下文中定义和执行表达式,同时它也是将
事件通知给另一个控制器和应用其他部分的中介。
将应用的业务逻辑都放在控制器中,而将相关的数据都放在控制器的作用域中,这是非常完美的架构。
作用域有以下的基本功能:
提供观察者以监视数据模型的变化;
可以将数据模型的变化通知给整个应用,甚至是系统外的组件;
可以进行嵌套,隔离业务功能和数据;
给表达式提供运算时所需的执行环境。
开发AngularJS应用的大部分工作内容,就是构建作用域及其相关的功能。
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
<script src="scripts/angular.min.js"></script>
<script type="text/javascript">
var myModule = angular.module('myModule', []);
myModule.run(function ($rootScope) {
$rootScope.name = "this is rootScope.name,World";
});
//告诉angular,要生成一个控制器,注入
myModule.controller('myController', function ($scope) {
$scope.name = "this is scope.name";//$scope.name就是数据模型
});
</script>
</head>
<body>
<div>
<p>
$rootScope是AngularJS中最接近全局作用域的对象。在$rootScope上附加太多业务逻并不是好主意,这与污染JavaScript的全局作用域是一样的。
</p> 我们可以不将变量设置在$rootScope上,而是用控制器显式创建一个隔离的子$scope对象,把它设置到这个子对象上。使用ng-controller指令可以将一个控制器对象附加到DOM元素上,
如下所示:
</div> <div ng-app="myModule">
rootScope name: {{name}} <br />
<div ng-controller="myController">
scope.name {{name}}
</div>
</div>
</body>
</html>
$scope对象的生命周期处理有四个不同阶段。
4.4.1 创建
在创建控制器或指令时,AngularJS会用$injector创建一个新的作用域,并在这个新建的控
制器或指令运行时将作用域传递进去。
4.4.2 链接
当Angular开始运行时,所有的$scope对象都会附加或者链接到视图中。所有创建$scope对象的函数也会将自身附加到视图中。这些作用域将会注册当Angular应用上下文中发生变化时需要运行的函数。
这些函数被称为$watch函数,Angular通过这些函数获知何时启动事件循环。
4.4.3 更新
当事件循环运行时,它通常执行在顶层$scope对象上(被称作$rootScope),每个子作用域都执行自己的脏值检测。每个监控函数都会检查变化。如果检测到任意变化,$scope对象就会触发指定的回调函数。
4.4.4 销毁
当一个$scope在视图中不再需要时,这个作用域将会清理和销毁自己。尽管永远不会需要清理作用域(因为Angular会为你处理),但是知道是谁创建了这个作用域还是有用的,因为你可以使用这个$scope上叫做$destory()的方法来清理这个作用域。
AngularJs学习笔记-AngularJS权威教程学习笔记的更多相关文章
- 学习笔记-AngularJs(十)
前面一直在说自定义指令,但是却一直没有一次系统地去了解,现在需要我们一起来学习如何去使用自定义指令,去丰富html标签.属性,实现多元化.多功能的标签(或是属性).辣么,啥是指令?要了解指令,首先需要 ...
- 学习笔记-AngularJs(九)
到目前为止,我们所做的学习案例都是没有加任何动画效果的,对于以往来说,我们经常会去使用一些动画插件或是css框架(如:animate.css)来点缀我们的网页,这样显得生动,高大上,那么接下来我们可以 ...
- 学习笔记-AngularJs(七)
在学习笔记-AngularJs(六)提及了事件处理器和过滤器以及它们的例子,而我们知道之前我是使用$http服务去获得我们需要的json数据,但是$http是比较底层的用法,有时候我们想把获取json ...
- 学习笔记-AngularJs(六)
在学习笔记-AngularJs(五),通过引入bootstrap.css进行改写整个样式,这时学习项目也变得好看多了,现在我们又需要目录再进行一次改变,如下图: 这样就符合之前讲的对学习目录进行布置了 ...
- 学习笔记-AngularJs(三)
学习笔记-AngularJs(二)写了个所有程序语言入门时都必须要写的Hello World,那么从现在开始做那个之前说过的互联网大佬介绍的学习例子,当然这里开始会慢慢按照之前说过的目录来搭建这个学习 ...
- 学习笔记-AngularJs(二)
在接下来学习angularjs中,我按照的就是之前 学习笔记-AngularJs(一)所讲的目录来搭建一个学习的项目,做一个互联网大佬人物简介的例子,当然也可以使用angualrjs上面提供的官方例子 ...
- angularjs学习第七天笔记(系统指令学习)
您好,接着在昨天对简单指令学习了解以后,今天开始学习了解angularjs中的系统指令 系统指令大部分都是以ng开始,这也是为什么在自定义指令命名时不要以ng开始的原因所在 系统指令在学习了分成两个部 ...
- angularjs学习第六天笔记(指令简介学习)
您好,由于周末有事情,没哟学习angularjs,几天晚上开始继续学习angularjs,坚持加油每一天.谢谢 接着上周五学习了表单验证以后,今天开始学习angularjs中一个非常重要的模块:指令 ...
- Hadoop权威指南学习笔记二
MapReduce简单介绍 声明:本文是本人基于Hadoop权威指南学习的一些个人理解和笔记,仅供学习參考,有什么不到之处还望指出,一起学习一起进步. 转载请注明:http://blog.csdn.n ...
随机推荐
- SVN 忽略获取和提交obj、bin文件夹
一.全局设置的方式(貌似不行) SVN忽略文件夹刚开始用的是这种方式: Settings => Subversion里的Global ignore pattern增加这两项*/bin */obj ...
- docker 换更优秀的 文件系统 比如 OverlayFS(centos7 overlay2)
内容摘自:http://www.projectatomic.io/blog/2015/06/notes-on-fedora-centos-and-docker-storage-drivers/ doc ...
- 从汇编层面深度剖析C++虚函数
文章出处:http://blog.csdn.net/linyt/article/details/6336762 虚函数是C++语言实现运行时多态的唯一手段,因此掌握C++虚函数也成为C++程序员是否合 ...
- jQuery层级元素选择器
第一个: 1:空格表示所有 2:> 第一层 3:+/- 同级 +:之后的第一个元素 -:之后所有同级 d 代码示例: <!DOCTYPE html PUBLIC "-//W3C/ ...
- linux驱动程序框架基础
============================ 指引 ============================= 第一节是最基础的驱动程序: 第二节是/dev应用层接口的使 ...
- 条款19 command 模式与好莱坞法则
当一个函数对象被当做回调时候,就是一个command模式的实例 什么是回调? 回调就是框架知道什么时候干一些事情,但是具体干什么,或许框架一无所知(因为回调函数不是他设计的),而用户则知道发生一个特定 ...
- Js/Ajax中发送HttpPost请求调用WebService
1) WebService中的方法 [WebService(Namespace = "http://tempuri.org/")] [WebServiceBinding(Confo ...
- C# 多线程 简单使用方法以及常用参数
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...
- c# float和double的“坑”
定义一个float类型的变量=0.7,结果在IL中却是0.69999999. 乘以10之后,获取整数值.得到的却是6.通过查看IL,竟然被转换成double类型再转换.就变成6了. Demo: IL: ...
- Simple Shopping Cart By AngularJS
<body ng-controller='CartController'> <h1>Your Order</h1> <div ng-repeat='item ...