Angular
是一款主旋律的MVVM
框架,框架和传统的库不一样:javascript
类库
是一些函数的集合,它能帮助你写WEB应用。起主导做用的是你的代码,由你来决定什么时候使用类库。类库有:jQuery等
html
框架
是一种特殊的、已经实现了的WEB应用,你只须要对它填充具体的业务逻辑。这里框架是起主导做用的,由它来根据具体的应用逻辑来调用你的代码。框架有:knockout等。前端
Angular.js
主要用于构建单页面web应用,提供了诸如:java
1.解耦应用逻辑、数据模型和视图 2.AJax服务 3.依赖注入 4.浏览历史 5.测试和更多功能
简要解释Angularjs
就是一个能够给HTML
加上互动性的客户端js
框架。咱们须要明白如何让HTML
适时调用js
。web
在Angular
中,咱们经过指令(Directives)给HTML
加上行为。指令是一个在HTML标签上的标记,用来告诉Angular
运行或者引用哪些js代码。为指令赋值函数名,便可运行。但这不是很好的方式,咱们只需明白这就是指令如何绑定行为的数组
模块是指写Angular
应用的代码片断,这样可使代码分离开来,所以代码会更好维护,可读和测试。还能够在module
里定义代码依赖关系,能够调用一个模块,再在代码中定义这个模块依赖于另外两个。app
var app = angular.module('store',[]);//store=>应用名,[]=>定义依赖关系,app为模块的实例对象
AngularJS
容许咱们使用angular.module()
方法来声明模块,这个方法可以接受两个参数, 第一个是模块的名称,第二个是依赖列表,也就是能够被注入到模块中的对象列表。框架
表达式{{}}
容许你动态插入值到你的HTML
当中。ide
控制器帮助咱们把应用内的数据信息显示到页面中,控制器是经过定义函数和变量,从而定义应用行为的地方。ng-controller
定义了AngularJS
应用程序被控制器控制。函数
ng-controller
帮助咱们把控制器附属在html元素上,做为ng-controller
属性的值,咱们要写控制器名字,咱们用as
关键字这个属性值起个别名。咱们将会在元素内的表达式中使用这个别名
<div ng-controller="StoreController as store"> <h1>{{store.product.name}}</h1> <h2>${{store.product.price}}</h2> <p>{{store.product.description}}</p> </div> (function () { var app = angular.module('store',[]); app.controller("StoreController", function () { this.product = gem; }); var gem = { name: 'trigkit4', price: 2.09, description: '...' } })();
这个控制器的范围权限仅限于它所附属的元素
指令是触发javascript函数行为的html标记
模块是定义应用的各个组成部分
控制器定义应用的行为
表达式控制咱们如何将信息显示在页面上
ng-app来把应用模块放到页面上 ng-controller来把逻辑控制器放到页面上 ng-show & ng-hide来经过表达式控制元素的显示与否 ng-repeat来循环一个数组中全部的数据
angular
提供了不少不一样的过滤器,在类似的表示方式下,即取出一些数据,传递数据(竖线| 后跟表达式)给相应的过滤器,
有时候也能够给它加上相应的参数
{{data* | filter:option*}}
好比:uppercase & lowercase
{{'trigkit4' | uppercase}} /*TRIGKIT4*/
还有好比限制过滤器(limitTo filter),能够控制字符的输出数量:
{{'My dictionary' | limitTo:8}} /*My dicti*/
Angularjs
经过指令(directive
)扩展HTML
的语法,经过经过{{}}
进行数据绑定
ng-app
属性声明全部被其包含的内容都属于这个AngularJS
应用, 只有被具备ng-app
属性的DOM元素包含的元素才会受AngularJS
影响。若是不写该指令,angular
是不会执行的。
ng-init
指令初始化应用程序数据,也就是为AngularJS
应用程序定义初始值。以下,为应用程序name
赋初值:
<div ng-app="" ng-init="names=['mike','trigkit4','jack']"> {{names}} <!--['mike','trigkit4','jack'] --> </div>
只须要使用ng-model
指令就能够把应用程序数据绑定到HTML
元素,实现model
和view
的双向绑定。看下面实例:
http://codepen.io/hawx1993/pe...
ng-bind
和Angularjs
表达式{{}}
很相似,不一样的是ng-bind
是在angular
解析渲染完毕后才将数据显示出来的。还有就是表达式不能写在DOM元素的属性里,而指令能够。
http://codepen.io/hawx1993/pe...
AngularJS
也有本身的HTML
事件指令,好比说经过ng-click
定义一个AngularJS
单击事件。
http://codepen.io/hawx1993/pe...
ng-hide="true"
,设置HTML
元素不可见。
控制器在AngularJS
中的做用是加强视图。 当咱们在页面上建立一个新的控制器时,AngularJS
会生成并传递一个新的$scope
给这个控 制器。能够在这个控制器里初始化$scope
。
http://codepen.io/hawx1993/pe...
要明确建立一个$scope
对象,咱们就要给DOM元素安上一个controller
对象,使用的是ng-controller
指令属性。
通常状况下,咱们使用控制器作两件事:
初始化 $scope
对象
为 $scope
对象添加行为(方法)
<div ng-app="" ng-init="people=[ {name:'mike',age:21}, {name:'trigkit4',age:22}, {name:'Tom',age:12}]"> <table> <tbody> <tr ng-repeat="x in people"> <td>{{'Name: ' + x.name + ',Age: '+ x.age}}</td> </tr> </tbody> </table> </div>
$scope
是一个将view
(一个DOM元素)连结到controller
上的对象。每个Angular应用都会有一个 $rootScope
。这个 $rootScope
是最顶级的scope
,它对应着含有 ng-app
指令属性的那个DOM元素。
它也是一个JavaScript
对象,指向应用程序做用域内的全部HTML元素和执行上下文。
全部$scope
都遵循原型继承,这意味着它们都能访问父$scope
,也具备原型链那样的特性,即向上访问属性和方法,直到最顶层。
简而言之,$scope
是与指令元素相关联的当前做用域,能够理解为视图和控制器间的一个通道。当angular运行时,全部的$scope
对象都会附加或者连接到视图中。
指令一般不会建立本身的$scope
,除了ng-controller
和ng-repeat
,他们会建立本身的子做用域并将他们附加到DOM元素上。
双向数据绑定意味着这些表达式会在属性改变的时候自动改变。当数据发生改变的时候,会使相应的视图进行改变,当咱们的视图上发生改变的时候,能够促使相应的数据发生改变,这就是双向的数据绑定到一块儿了。
双向数据绑定
节省了大量的样板代码。Angular
帮助你把构建应用的程序块划分为下面这几种类型:控制器(Controller
),指令(Directive
),工厂(Factory
),过滤器 (Filter
),服务(Service
)和视图(View
) (就是模板)。它们被组织为模块形式,以后能够被另外一个引用。
双向数据绑定:数据模型(Module)和视图(View)之间的双向绑定。
双向数据绑定的优势是无需进行和单向数据绑定的那些CRUD(Create,Retrieve,Update,Delete)操做
双向数据绑定最常常的应用场景就是表单了,这样当用户在前端页面完成输入后,不用任何操做,咱们就已经拿到了用户的数据存放到数据模型中了。
依赖注入的意思是 你须要的东西不用由你建立,而是由第三方,或者说容器提供给你的。这样的设计符合正交性,即所谓的松耦合。
总之就是你不用关心对象的生命周期,何时被建立,何时销毁,只需直接使用便可,对象的生命周期由提供 依赖注入的框架来管理。
todoList demo