Angular JS笔记
1.引导程序
使用ng-app开始引导一个程序:标记了AngularJS应用的作用域
- <!doctype html>
- <html lang="en" ng-app>
双括号绑定表达式:
- <p>Nothing here {{'yet' + '!'}}</p>
2.视图和模板
其核心为MVC模式
原理:在AngularJS中,一个视图是模型通过HTML模板渲染之后的映射
HTML模板:
包含ng-controller指令,和ng-repeat指令
- <html ng-app>
- <head>
- ...
- <script src="lib/angular/angular.js"></script>
- <script src="js/controllers.js"></script>
- </head>
- <body ng-controller="PhoneListCtrl">
- <ul>
- <li ng-repeat="phone in phones">
- {{phone.name}}
- <p>{{phone.snippet}}</p>
- </li>
- </ul>
- </body>
- </html>
ng-repeat的语法:对象变量 in 对象数组
模型和控制器:
$scope是作用域,为根作用域的一个后继,这里使用的是按照名称的DI。
phones即模型。
- function PhoneListCtrl($scope) {
- $scope.phones = [
- {"name": "Nexus S",
- "snippet": "Fast just got faster with Nexus S."},
- {"name": "Motorola XOOM? with Wi-Fi",
- "snippet": "The Next, Next Generation tablet."},
- {"name": "MOTOROLA XOOM?",
- "snippet": "The Next, Next Generation tablet."}
- ];
- }
AngularJS的作用域理论非常重要:
- 一个作用域可以视作模板、模型和控制器协同工作的粘接器。
- AngularJS使用作用域,同时还有模板中的信息,数据模型和控制器。
- 这些可以帮助模型和视图分离,但是他们两者确实是同步的!(绑定)任何对于模型的更改都会即时反映在视图上;任何在视图上的更改都会被立刻体现在模型中。
3.过滤器
页面上的条件过滤:
Search: <input ng-model="query">
- <ul class="phones">
- <li ng-repeat="phone in phones | filter:query">
- {{phone.name}}
- <p>{{phone.snippet}}</p>
- </li>
- </ul>
解释:
- 在这段代码中,用户在输入框中输入的数据名字称作query,会立刻作为列表迭代器(phone in phones | filter:query`)其过滤器的输入。当数据模型引起迭代器输入变化的时候,迭代器可以高效得更新DOM将数据模型最新的状态反映出来。
- 使用filter过滤器:filter函数使用query的值来创建一个只包含匹配query记录的新数组。
ngRepeat会根据filter过滤器生成的手机记录数据数组来自动更新视图。
整个过程对于开发者来说都是透明的。
4.双向绑定
使用orderProp来作为一个模型绑定,其值被应用到过滤器之后用作排序
orderBy:orderProp:按照orderProp选择的属性来排序。
- <select ng-model="orderProp">
- <option value="name">Alphabetical</option>
- <option value="age">Newest</option>
- </select>
- <ul class="phones">
- <li ng-repeat="phone in phones | filter:query | orderBy:orderProp">
- {{phone.name}}
- <p>{{phone.snippet}}</p>
- </li>
- </ul>
初始化:
$scope.orderProp = 'age';
5. XHR和依赖注入
DI:$开头的,一系列的对象。如:$scope, $http。
- function PhoneListCtrl($scope, $http) {
- $http.get('phones/phones.json').success(function(data) {
- $scope.phones = data;
- });
- $scope.orderProp = 'age';
- }
避免压缩的DI:
- PhoneListCtrl.$inject = ['$scope', '$http'];
另外一种方法:
- 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要解决的问题毫无关联,所以这些模块完全可以共存来实现各自的目标。
模块:
- angular.module('phonecat', []).
- config(['$routeProvider', function($routeProvider) {
- $routeProvider.
- when('/phones', {templateUrl: 'partials/phone-list.html', controller: PhoneListCtrl}).
- when('/phones/:phoneId', {templateUrl: 'partials/phone-detail.html', controller: PhoneDetailCtrl}).
- otherwise({redirectTo: '/phones'});
- }]);
使用$routeParams来获取URL参数:
/phone/:phoneId
- function PhoneDetailCtrl($scope, $routeParams) {
- $scope.phoneId = $routeParams.phoneId;
- }
使用nv-view来作为母版页:
<div ng-view></div>
8.事件处理器
- $scope.setImage = function(imageUrl) {
- $scope.mainImageUrl = imageUrl;
- }
使用ng-click来绑定函数(事件处理):
- <ul class="phone-thumbs">
- <li ng-repeat="img in phone.images">
- <img ng-src="{{img}}" ng-click="setImage(img)">
- </li>
- </ul>
Angular JS笔记的更多相关文章
- 秒味课堂Angular js笔记------Angular js中的工具方法
Angular js中的工具方法 angular.isArray angular.isDate angular.isDefined angular.isUndefined angular.isFunc ...
- 秒味课堂Angular js笔记------指令
1.属性指令 angularjs样式相关指令: ng-class ng-style ng-href ng-src ng-attr-(suffix) ng-bind ng-cloak 没解析完之前标签 ...
- 秒味课堂Angular js笔记------过滤器
不同过滤器的小demo. currency number uppercase json limitTo date orderBy filter <script> var filterMy ...
- 秒味课堂Angular js笔记------$scope.$watch和$scope.$apply
$scope.$watch(watchFn , watchAction , deepWatch) 其中,watchFn是带有angular表达式或函数字符串: watchAction是一个函数或者表达 ...
- Angular JS 学习笔记(自定义服务:factory,Promise 模式异步请求查询:$http,过滤器用法filter,指令:directive)
刚学没多久,作了一个小项目APP,微信企业号开发与微信服务号的开发,使用的是AngularJS开发,目前项目1.0版本已经完结,但是项目纯粹为了赶工,并没有发挥AngularJS的最大作用,这几天项目 ...
- 学习angular.js的一些笔记想法(上)
1.data-ng-app与ng-app的区别 data-ng-app是为了h5不报错 2.ng-class 不多说就来拿例子说吧 html代码 <div class='color-change ...
- [学习笔记] 七步从Angular.JS菜鸟到专家(3):数据绑定和AJAX [转]
这是"AngularJS - 七步从菜鸟到专家"系列的第三篇. 在第一篇,我们展示了如何开始搭建一个AngularaJS应用.第二篇我们讨论了scope和 $scope 的功能. 通过这整个系列的教程 ...
- Angular.js 学习笔记
AngularJS 通过新的属性和表达式扩展了 HTML. AngularJS 可以构建一个单一页面应用程序. <!-- ng-app 指令定义一个 AngularJS 应用程序. ng-mod ...
- 关于Angular.js Routing 的学习笔记(实现单页应用)
最近开始学习angular.js,发现angular.js确实很方便,也很强大.在看到 AngularJS Routing and Multiple Views 这一部分的时候,有点乱.现在通过记录一 ...
随机推荐
- Linux 中文乱码问题解决
本文转载自:http://linux-wiki.cn/wiki/zh-hans/Java%E7%A8%8B%E5%BA%8F%E4%B8%AD%E6%96%87%E5%AD%97%E4%BD%93%E ...
- Mysql子查询
1单值(Scalar operand) 只有当外层(Parent)不为空时,才返回相应值:否则返回NULL. note:For the subquery just shown, if t1 were ...
- Ubuntu自定义服务
1.准备脚本 准备好一个bash服务脚本,包括start|stop|restart等参数,将脚本文件命名为“服务名”,拷贝到/etc/init.d/目录下. 2.添加服务sudo update-rc. ...
- AngularJS模型 ng-model 指令
ng-model 指令用于绑定应用程序数据到 HTML 控制器(input, select, textarea)的值. ng-model 指令可以将输入域的值与 AngularJS 创建的变量绑定.例 ...
- python 取两数的百分比
Python (r266:, Jan , ::) [GCC (Red Hat -)] on linux2 Type "help", "copyright", & ...
- gitlab 建仓的流程
repository:仓库 Git global setup: git config --global user.name "Administrator" git config - ...
- 比较各大挪动门户网站淘宝、京东、网易、新浪、腾讯meta标签的异同
首先先展示一下各个网站的有关meta标签的代码: 网易 <meta charset="UTF-8"> <meta content="width=devi ...
- Validform 学习笔记---基础知识整理
面对表单的验证,自己写大量的js毕竟不是一个明智的做法.不仅仅是代码很长而且不便于梳理.Validform就是一款开源的第三方验证js的控件,通过添加相应的js以及css能够有效的验证表单,维护起来也 ...
- 你可能不知道的java、python、JavaScript以及jquary循环语句的区别
一.概述 java循环语句分为四种形式,分别是 while, do/while, for, foreach: python中循环语句有两种,while,for: JavaScript中循环语句有四种, ...
- 计算G711语音的打包长度和RTP里timestamp(时间戳)的增长量
转自:http://blog.csdn.net/xujianglun/article/details/48342367 如何计算G711语音等的打包长度和RTP里timestamp的增长量 一般对于不 ...