AngularJS是一个WEB应用框架。

  本节我们会学习控制器(控制数据),会学习作用域(连接控制器和用户界面),用户界面又叫做视图,通过模板和作用域来创建交互视觉效果。另外,我们还会学习其他的特性比如如何使用过滤器来转换数据、如何构建并使用指令来增强现有的HTML元素,以及如何从外部数据源中加载并保存应用数据。

  3.1 AngularJS初探

  一个典型的AngularJS应用的组件:

  3.1.1 视图和模板:描述内容

    模板:是一块HTML内容,就是带有指令或者表达式的HTML,可以在需要的时候载入应用。

    视图:会使用模板来展示数据,视图一定会有一个模板(就是HTML标签),还会有模板需要用到的数据,视图会获取数据并使用数据中的值来对模板进行渲染。

    指令:指令会修改包含它的元素的行为。Angular有很多自带的指令,他们都是以ng开头的,如用来修饰显示样式的(ngShow、ngClass)、用于表单的(ngModel、ngForm)、用于监听单击等事件的(ngClick、ngMouseover),Angular还有许多作用在原生HTML元素上的指令,提供一些HTML没有的功能,这些元素包括输入框、文本区域和锚点。

    表达式:双花括号{{}},表示某些数据会被展示在这里,这种思想被称为数据绑定。花括号中的所有内容都是表撒施,AngularJS会用当前模型的数据对表达式进行求值。

    ngApp和ng-App的区别:

    ngApp是JavaScript版本的名字,ng-App是HTML版本的名字。

  模板代码示例:

//以下是一段模板
<ul class=""list-group>
<li class="list-group-item">
ng-repeat="note in notes" //ng-repeat为笔记数组中的每个笔记创建一个li
ng-click="displayNote($index)" //ng-click会在li被点击时调用displayNote()方法
ng-class="{active:note.id == content.id}">{{note.title}}<br /> //用ng-class来控制是否显示一个类
<small>{{note.date | date:'short'}}</small> //显示数据并使用过滤器显示较短的日期格式
</li>
</ul>

  3.1.2 控制器、模型和作用域:管理数据和逻辑

    控制器:是附加在文档对象模型(DOM)节点上的函数,用来驱动你的应用逻辑。在JavaScript中,控制器就是一个函数,用来和作用域通信并相应事件。

    作用域:可以理解为在控制器和视图之间共享的一个上下文,可以爸它看做控制器和界面的桥梁,作用域在控制器中更新时也会更新视图。作用域有两个核心角色:存储数据并允许控制器的方法访问数据。存储在作用域中的数据被称为模型,模型可以是任意的JavaScript值(通常是数组或者对象,也可以是简单的数字或者字符串),你可以把它存储在作用域中,然后通过作用域共享给控制器和视图。

  控制器代码示例:

angular.module('app').controller('Controller',function($scope){  //声明控制器并使用$scope服务来访问作用域
$scope.notes = [ //创建笔记对象数组并赋值给notes模型,ngrepeat会显示这个模型
{id:1,title:'Note 1',date:new Date()},
{id:2,title:'Note 2',date:new Date()}
];
$scope.getNote=function(index){ //添加一个方法,它会被视图中的ngClick命令出发并更新当前值
$scope.content=$scope.notes[index];
};
});

    控制器中的所有内容和应用的其他部分隔离,除了它自己的子作用域。这很重要,因为这可以限制代码和变量的可见性。

    根作用域(通过$root Scope对象访问)是Angular创建的第一个作用域,是其他所有作用域的基础,这意味着你放在根作用域上的所有东西对其他作用域都是可见的,听起来似乎还不错,但是最好不要这样做。需要保持作用域整洁和聚焦,而不是把所有东西都推在根作用域里。

    控制器不是万能的:一要避免在控制器中进行DOM操作,二要避免在控制器中格式化或者过滤数据,可以使用表单来做这些事。

  3.1.3 Service:可重用的对象和方法

    Angular中有一个概念叫service,它本质上就是一个JavaScript对象,可以在整个应用中共享。Angular默认提供了许多service,你也可以创建自己的service。

    $http是一个非常常见的service,Angular用它来操作HTTP请求。

    service是有Angular延迟加载的,也就是说,他们只会在使用的时候才会载入内存。他们还是单例的,如果你在一个地方改变了service的值,其他用到这个service的地方都会受到影响。

    Ionic把许多特性写成了Angular的service,需要注意的是,控制器中包含的几乎所有内容都是service。

  3.1.4 双向数据绑定:在控制器和视图之间共享数据

    Angular最强大的特性之一就是双向数据绑定。视图将数据绑定到模板,反过来也同样使用。视图可以改变作用域中的数据,数据会立刻更新到作用域并反映到控制器中。这在表单中尤其有用,用户向文本框中输入内容时作用域中的值会同步更新。你不需要做任何特殊的事情来启动双向数据绑定,它会自动实现。如下面的例子:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script src="http://cdn.static.runoob.com/libs/angular.js/1.4.6/angular.min.js"></script>
</head>
<body> <div ng-app="myApp" ng-controller="formCtrl">
<form novalidate>
First Name:<br>
<input type="text" ng-model="user.firstName"><br>
Last Name:<br>
<input type="text" ng-model="user.lastName">
<br><br>
<button ng-click="reset()">RESET</button>
</form>
<p>form = {{user }}</p>
<p>master = {{master}}</p>
</div> <script>
var app = angular.module('myApp', []);
app.controller('formCtrl', function($scope) {
$scope.master = {firstName:"John", lastName:"Doe"};
$scope.reset = function() {
$scope.user = angular.copy($scope.master);
};
$scope.reset();
});
</script> </body>
</html>

  以上就是Angular的核心概念,这些背景知识已经足够你起步。

    

    

3.1 AngularJS必备知识的更多相关文章

  1. Java面试必备知识

    JAVA面试必备知识 第一,谈谈final, finally, finalize的区别. 第二,Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可 ...

  2. Apache Tomcat8必备知识

    Apache Tomcat8必备知识 作者:chszs,转载需注明.博客主页: http://blog.csdn.net/chszs 一.Apache Tomcat 8介绍 Apache Tomcat ...

  3. <转载>Div+Css布局教程(-)CSS必备知识

    目录: 1.Div+Css布局教程(-)CSS必备知识 注:本教程要求对html和css有基础了解. 一.CSS布局属性 Width:设置对象的宽度(width:45px). Height:设置对象的 ...

  4. AngularJS进阶(十二)AngularJS常用知识汇总(不断更新中....)

    AngularJS常用知识汇总(不断更新中....) 注:请点击此处进行充电! app.controller('editCtrl',['$http','$location','$rootScope', ...

  5. 微软实战训练营(X)重点班第(1)课:SOA必备知识之ASP.NET Web Service开发实战

    微软实战训练营 上海交大(A)实验班.(X)重点班 内部课程资料 链接:http://pan.baidu.com/s/1jGsTjq2 password:0wmf <微软实战训练营(X)重点班第 ...

  6. 移动web开发(一)——移动web开发必备知识

    参考: 移动终端开发必备知识.http://isux.tencent.com/mobile-development-essential-knowledge.html

  7. Div+Css布局教程(-)CSS必备知识

    目录: 1.Div+Css布局教程(-)CSS必备知识 注:本教程要求对html和css有基础了解. 一.CSS布局属性 Width:设置对象的宽度(width:45px). Height:设置对象的 ...

  8. 性能测试必备知识(2)- 查看 Linux 的 CPU 相关信息

    做性能测试的必备知识系列,可以看下面链接的文章哦 https://www.cnblogs.com/poloyy/category/1806772.html 查看系统 CPU 信息 cat /proc/ ...

  9. 性能测试必备知识(4)- 使用 stress 和 sysstat

    做性能测试的必备知识系列,可以看下面链接的文章哦 https://www.cnblogs.com/poloyy/category/1806772.html stress 介绍 Linux 系统压力测试 ...

随机推荐

  1. 【原创】自己动手写工具----签到器[Beta 2.0]

    一.前面的话 上一篇中基本实现了简单的签到任务,但是不够灵活.在上一篇自己动手写工具----签到器的结尾中,我设想了几个新增功能来提高工具的灵活程度,下面把新增功能点列出来看看: (1)新增其他的进程 ...

  2. 懵懂的js原型

    说起原型,就得提起函数,js中据说是这样定义的,每个函数都有一个prototype 属性,(这个属性啊,又是个对象).为了构造函数能复用,就引出了原型,要把共享的东西放到原型上去.例如 //构造函数, ...

  3. DPM模型简单记录

    这个模型思想很直观(有误),但是写的源码太难懂了(看的是release-3的版本,最接近Object Detection with Discriminatively Trained Part Base ...

  4. UP Board USB无线网卡一贴通

    前言 原创文章,转载引用务必注明链接,水平有限,欢迎指正. 本文环境:ubilinux 3.0 kernel 4.4.0 本文使用Markdown写成,为获得更好的阅读体验和正常的图片.链接,请访问我 ...

  5. centos 6.4 getmail 收取163 邮件

    #CentOS 6.6 64bit 默认yum 源没有getmail rpm包#首先安装EPEL yum 源EPEL(Extra Packages for Enterprise Linux):http ...

  6. Struts2返回json格式数据踩坑记录

    事件起因 昨天提测修改冻结/解冻银行卡样式的功能,微姐测试过程中发现调用ajax请求耗时过长,今天来排查,发现浏览器请求/finance/ajax/freeze/ajaxGetShopLists时,对 ...

  7. [Asp.net mvc]OutputCacheAttribute

    什么是Cache? 缓存在web应用中是一种以空间换去时间的技术,把频繁访问并且不经常变化的数据存储到内存中,以达到快速访问的目的.在web应用中是比较常见的优化方式. OutputCacheAttr ...

  8. 用R去做文本处理

    数据说明 这是一份爬好的数据,data.frame格式.包括一些招聘信息,具体的列名和含义如下所示: 职位名称(occ_name)清洗 预览 清洗策略 需要去除无关的信息,比如符号以及数字信息 实现 ...

  9. Android中Service通信(一)——启动Service并传递数据

    启动Service并传递数据的小实例(通过外界与服务进行通信): 1.activity_main.xml: <EditText android:layout_width="match_ ...

  10. 关于MySQL的wait_timeout连接超时问题报错解决方案

    bug回顾 : 想必大家在用MySQL时都会遇到连接超时的问题,如下图所示: ### Cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsExce ...