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. 解决sqlite3_key的问题

    报错内容显示如下: ld: warning: ignoring file /Users/rowling/Library/Developer/Xcode/DerivedData/zhinengbango ...

  2. in addition to 和 except for

    except for 除了...以外(与 except for 连用的整体词与 except for 所跟的词往往不是同类的,是指整体中除去 一个细节.) eg:Your composition is ...

  3. RedHat下安装MySQL

    下载mysql 解压tar -xvf mysql-5.7.16-1.el6.x86_64.rpm-bundle.tar 安装MySQL-server包 rpm -ivh mysql-community ...

  4. NYOJ题目111分数加减法

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAsEAAAKBCAIAAAA5i+FPAAAgAElEQVR4nO3dPXLbugMv7LsJ916Iay ...

  5. Hadoop CDH5 集群管理

    Hadoop 是一个开源项目,所以很多公司在这个基础进行商业化,Cloudera 对 Hadoop做了相应的改变.Cloudera 公司的发行版,我们将该版本称为 CDH(Cloudera Distr ...

  6. 两个viewport的故事(第一部分)

    原文:http://www.quirksmode.org/mobile/viewports.html 在这个迷你系列的文章里边我将会解释viewport,以及许多重要元素的宽度是如何工作的,比如< ...

  7. Label Font 字体样式设置

    label.font = [UIFont fontWithName:@"Arial-BoldItalicMT" size:24]; 字体名如下: Font Family: Amer ...

  8. JQ AJAX

    用AJAX方法不刷新网页使用下拉列表连接数据库 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" ...

  9. logstash json和rubydebug 第次重启logstash都会把所有的日志读完 而不是只读入新输入的内容

    查看一下agent端的shipper的配置: # cat logstash_test2.shipper.conf input { file { path => ["/apps/logs ...

  10. CSS3实现32种基本图形

    CSS3可以实现很多漂亮的图形,我收集了32种图形,在下面列出.直接用CSS3画出这些图形,要比贴图性能更好,体验更加,是一种非常好的网页美观方式. 这32种图形分别为圆形,椭圆形,三角形,倒三角形, ...