1.引导程序

使用ng-app开始引导一个程序:标记了AngularJS应用的作用域

  1. <!doctype html>
  2. <html lang="en" ng-app>

双括号绑定表达式:

  1. <p>Nothing here {{'yet' + '!'}}</p>

2.视图和模板

其核心为MVC模式

原理:在AngularJS中,一个视图是模型通过HTML模板渲染之后的映射

HTML模板

包含ng-controller指令,和ng-repeat指令

  1. <html ng-app>
  2. <head>
  3.   ...
  4.   <script src="lib/angular/angular.js"></script>
  5.   <script src="js/controllers.js"></script>
  6. </head>
  7. <body ng-controller="PhoneListCtrl">
  8.  
  9.   <ul>
  10.     <li ng-repeat="phone in phones">
  11.       {{phone.name}}
  12.     <p>{{phone.snippet}}</p>
  13.     </li>
  14.   </ul>
  15. </body>
  16. </html>

ng-repeat的语法:对象变量 in 对象数组

模型和控制器

$scope是作用域,为根作用域的一个后继,这里使用的是按照名称的DI。

phones即模型。

  1. function PhoneListCtrl($scope) {
  2.   $scope.phones = [
  3.     {"name": "Nexus S",
  4.      "snippet": "Fast just got faster with Nexus S."},
  5.     {"name": "Motorola XOOM? with Wi-Fi",
  6.      "snippet": "The Next, Next Generation tablet."},
  7.     {"name": "MOTOROLA XOOM?",
  8.      "snippet": "The Next, Next Generation tablet."}
  9.   ];
  10. }

AngularJS的作用域理论非常重要:

  1. 一个作用域可以视作模板、模型和控制器协同工作的粘接器
  2. AngularJS使用作用域,同时还有模板中的信息,数据模型和控制器。
  3. 这些可以帮助模型和视图分离,但是他们两者确实是同步的!(绑定)任何对于模型的更改都会即时反映在视图上;任何在视图上的更改都会被立刻体现在模型中。

3.过滤器

页面上的条件过滤:

Search: <input ng-model="query">

  1. <ul class="phones">
  2.         <li ng-repeat="phone in phones | filter:query">
  3.           {{phone.name}}
  4.         <p>{{phone.snippet}}</p>
  5.         </li>
  6. </ul>

解释:

  • 在这段代码中,用户在输入框中输入的数据名字称作query,会立刻作为列表迭代器(phone in phones | filter:query`)其过滤器的输入。当数据模型引起迭代器输入变化的时候,迭代器可以高效得更新DOM将数据模型最新的状态反映出来。
  • 使用filter过滤器:filter函数使用query的值来创建一个只包含匹配query记录的新数组。

    ngRepeat会根据filter过滤器生成的手机记录数据数组来自动更新视图。

    整个过程对于开发者来说都是透明的。

4.双向绑定

使用orderProp来作为一个模型绑定,其值被应用到过滤器之后用作排序

orderBy:orderProp:按照orderProp选择的属性来排序。

  1. <select ng-model="orderProp">
  2.   <option value="name">Alphabetical</option>
  3.   <option value="age">Newest</option>
  4. </select>
  5.  
  6.  
  7. <ul class="phones">
  8.   <li ng-repeat="phone in phones | filter:query | orderBy:orderProp">
  9.     {{phone.name}}
  10.     <p>{{phone.snippet}}</p>
  11.   </li>
  12. </ul>

初始化:

$scope.orderProp = 'age';

5. XHR和依赖注入

DI:$开头的,一系列的对象。如:$scope, $http。

  1. function PhoneListCtrl($scope, $http) {
  2.   $http.get('phones/phones.json').success(function(data) {
  3.     $scope.phones = data;
  4.   });
  5.  
  6.   $scope.orderProp = 'age';
  7. }

避免压缩的DI:

  1. PhoneListCtrl.$inject = ['$scope', '$http'];

另外一种方法:

  1. var PhoneListCtrl = ['$scope', '$http', function($scope, $http) { /* constructor body */ }];

6.链接

<img ng-src="{{phone.imageUrl}}">

7.路由和多视图

AngularJS中应用的路由通过$routeProvider来声明,它是$route服务的提供者。

注入器:唯一的职责是载入指定的服务模块

当应用引导时,AngularJS会创建一个注入器,我们应用后面所有依赖注入的服务都会需要它。这个注入器自己并不知道$http和$route是干什么的,实际上除非它在模块定义的时候被配置过,否则它根本都不知道这些服务的存在。注入器唯一的职责是载入指定的服务模块,在这些模块中注册所有定义的服务提供者,并且当需要时给一个指定的函数注入依赖(服务)。这些依赖通过它们的提供者"懒惰式"(需要时才加载)实例化。

提供者是提供(创建)服务实例并且对外提供API接口的对象,它可以被用来控制一个服务的创建和运行时行为。对于$route服务来说,$routeProvider对外提供了API接口,通过API接口允许你为你的应用定义路由规则。

AngularJS模块解决了从应用中删除全局状态和提供方法来配置注入器这两个问题。和AMD或者require.js这两个模块(非AngularJS的两个库)不同的是,AngularJS模块并没有试图去解决脚本加载顺序以及懒惰式脚本加载这样的问题。这些目标和AngularJS要解决的问题毫无关联,所以这些模块完全可以共存来实现各自的目标。

模块:

  1. angular.module('phonecat', []).
  2.   config(['$routeProvider', function($routeProvider) {
  3.   $routeProvider.
  4.       when('/phones', {templateUrl: 'partials/phone-list.html', controller: PhoneListCtrl}).
  5.       when('/phones/:phoneId', {templateUrl: 'partials/phone-detail.html', controller: PhoneDetailCtrl}).
  6.       otherwise({redirectTo: '/phones'});
  7. }]);

使用$routeParams来获取URL参数:

/phone/:phoneId

  1. function PhoneDetailCtrl($scope, $routeParams) {
  2.   $scope.phoneId = $routeParams.phoneId;
  3. }

使用nv-view来作为母版页:

<div ng-view></div>

8.事件处理器

  1. $scope.setImage = function(imageUrl) {
  2.     $scope.mainImageUrl = imageUrl;
  3. }

使用ng-click来绑定函数(事件处理):

  1. <ul class="phone-thumbs">
  2.   <li ng-repeat="img in phone.images">
  3.     <img ng-src="{{img}}" ng-click="setImage(img)">
  4.   </li>
  5. </ul>

Angular JS笔记的更多相关文章

  1. 秒味课堂Angular js笔记------Angular js中的工具方法

    Angular js中的工具方法 angular.isArray angular.isDate angular.isDefined angular.isUndefined angular.isFunc ...

  2. 秒味课堂Angular js笔记------指令

    1.属性指令 angularjs样式相关指令: ng-class ng-style ng-href ng-src ng-attr-(suffix) ng-bind ng-cloak  没解析完之前标签 ...

  3. 秒味课堂Angular js笔记------过滤器

    不同过滤器的小demo. currency number uppercase json limitTo date orderBy filter <script> var filterMy ...

  4. 秒味课堂Angular js笔记------$scope.$watch和$scope.$apply

    $scope.$watch(watchFn , watchAction , deepWatch) 其中,watchFn是带有angular表达式或函数字符串: watchAction是一个函数或者表达 ...

  5. Angular JS 学习笔记(自定义服务:factory,Promise 模式异步请求查询:$http,过滤器用法filter,指令:directive)

    刚学没多久,作了一个小项目APP,微信企业号开发与微信服务号的开发,使用的是AngularJS开发,目前项目1.0版本已经完结,但是项目纯粹为了赶工,并没有发挥AngularJS的最大作用,这几天项目 ...

  6. 学习angular.js的一些笔记想法(上)

    1.data-ng-app与ng-app的区别 data-ng-app是为了h5不报错 2.ng-class 不多说就来拿例子说吧 html代码 <div class='color-change ...

  7. [学习笔记] 七步从Angular.JS菜鸟到专家(3):数据绑定和AJAX [转]

    这是"AngularJS - 七步从菜鸟到专家"系列的第三篇. 在第一篇,我们展示了如何开始搭建一个AngularaJS应用.第二篇我们讨论了scope和 $scope 的功能. 通过这整个系列的教程 ...

  8. Angular.js 学习笔记

    AngularJS 通过新的属性和表达式扩展了 HTML. AngularJS 可以构建一个单一页面应用程序. <!-- ng-app 指令定义一个 AngularJS 应用程序. ng-mod ...

  9. 关于Angular.js Routing 的学习笔记(实现单页应用)

    最近开始学习angular.js,发现angular.js确实很方便,也很强大.在看到 AngularJS Routing and Multiple Views 这一部分的时候,有点乱.现在通过记录一 ...

随机推荐

  1. windows一个目录下最大文件数目

    对于FAT16文件系统, 可以保存的文件体积最大值是 4 GB - 1 byte (2^32 bytes - 1 byte): 卷的最大体积是4GB:每个卷上最多可以保存的文件数量是65,536个 ( ...

  2. qt_文本编辑器实现_附带详细注释和源码下载

    源码下载: 链接: http://pan.baidu.com/s/1c21EVRy 密码: qub8 实现主要的功能有:新建,打开,保存,另存为,查找(查找的时候需要先将光标放到最下面位置才能查全,不 ...

  3. Innodb之表空间转移

    我们可以将数据表转移到其他磁盘,以减弱单个磁盘的IO. 如 1创建一个表空间: 2修改表以使用新的表空间,如果表有大量数据,则会需要一些时间重建:所以会锁表一段时间: Note:会将原有的表空间删除, ...

  4. Gif图片制作

    gif图片是博客中展示项目效果的一种很好的方式,为我们的app制作一张gif图片并不复杂,录制屏幕采用系统自带的QuickTime Player,制作gif采用PicGIF软件.licecap软件更是 ...

  5. Foreign key (referential) constraints on DB2 LUW v105

    oreign key constraints (also known as referential constraints or referential integrity constraints) ...

  6. hdu 4006 The kth great number

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4006 思路:利用优先队列的性质,将数据存入后会自动对数据进行排序 #include<stdlib ...

  7. ios 拨打电话

    1,这种方法,拨打完电话回不到原来的应用,会停留在通讯录里,而且是直接拨打,不弹出提示NSMutableString * str=[[NSMutableString alloc] initWithFo ...

  8. 重温WCF之数据契约中使用枚举(转载)(十一)

    转载地址:http://www.zhuli8.com/wcf/EnumMember.html 枚举类型的定义总是支持序列化的.当我们定义一个新的枚举时,不必应用DataContract特性,就可以在数 ...

  9. HDU3364 Lanterns(求矩阵的秩)

    求矩阵的秩,及判断有无解 #include<cstdio> #include<iostream> #include<cstdlib> #include<cst ...

  10. 使用zookeeper实现分布式锁

    简介: 核心是解决资源竞争的问题 分布式系统中经常需要协调多进程或者多台机器之间的同步问题,得益于zookeeper,实现了一个分布式的共享锁,方便在多台服务器之间竞争资源时,来协调各系统之间的协作和 ...