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 这一部分的时候,有点乱.现在通过记录一 ...
随机推荐
- Django搭建简易博客
Django简易博客,主要实现了以下功能 连接数据库 创建超级用户与后台管理 利用django-admin-bootstrap美化界面 template,view与动态URL 多说评论功能 Markd ...
- ssh -v root@xxxxx 显示登录的细节
[root@ok .ssh]# ssh -v root@10.100.2.84 OpenSSH_5.3p1, OpenSSL Feb debug1: Reading configuration dat ...
- windows服务 2.实时刷新App.config
参考 http://www.cnblogs.com/jeffwongishandsome/archive/2011/04/24/2026381.html http://www.cnblogs.com/ ...
- map find 是线程安全的吗
测试环境gcc4.8.2 iterator find ( const key_type& k ); const_iterator find ( const key_type& ...
- HTML5学习之画布和SVG(四)
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...
- at org.apache.jsp.index_jsp._jspInit(index_jsp.java:22) 报空指针
原来发布到weblogic 的项目,想改动发布到tomcat上.启动发布一切都正常.出入项目请求路径却包错: java.lang.NullPointerException at org.apache. ...
- 檢查RAC狀態
1.使用srvctl工具檢查RAC當前配置和狀態 $ srvctl config database -h Displays the configuration for the database. Us ...
- C# 文件读取方法,自己写的例子,保存一下,备用
/// <summary> /// 将output.config内容传到app.config /// </summary> string ReadString; //两个地址 ...
- 使用Visual Studio Code开发AngularJS应用
(此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 题记:VSC发布之后,尤其最近刚刚更新到0.3之后,社区出现了很多介绍VSC使用的好文章.比 ...
- Linux命令之ar - 创建静态库.a文件和动态库.so
转自:http://blog.csdn.net/eastonwoo/article/details/8241693 用途说明 创建静态库.a文件.用C/C++开发程序时经常用到,但我很少单独在命令行中 ...