在AngularJS中,视图是模型在模板中的映射的结果(模型(Model)和视图模型的绑定(View Model))。这意味当模型发生变化时,视图上的绑定内容会对应更新。
模型
看第一个的例子,模型与模板:
1 2 3 4 |
|
在jsfiddle中查看,http://jsfiddle.net/benweizhu/j6b5271r/
在这个例子中,使用了一个HTML本身没有的语法ng-model=“name”,它是AngularJS扩展的HTML语法,叫做ng-model指令,还用到了,AngularJS的数值表达式。
我们知道在大部分传统模板系统中,对模板的渲染都是线性单向的过程:模型和模板混合在一起产生标记的计算结果。当任何模型发生改变后都需要模板重新计算。
在AngularJS中,当输入框中的内容改变时,对应的模型name会发生改变,AngularJS会检测到模型发生改变,重新渲染模板中与该模型绑定的视图部分。
这是AngularJS提供的最基本也是最重要的功能之一,数据的双向绑定。
控制器
再来第二个例子,模型和控制器:
1 2 3 4 5 |
|
1 2 3 |
|
在jsfiddle中查看,http://jsfiddle.net/benweizhu/m5gue0zs/
在这里,用到了AngularJS中的另一个指令ng-controller,在这个Controller的范围内,定义了一个模型name,我们通过模板域模型$scope对象得到controller范围内定义的模型name,并赋值。
在例子中,我们通过$scope对象将模型数据name传递给Controller,从而进行数据的初始化。
虽然,一般情况下,我们不会用这样的方式去建立controller,但是我们可以清晰的看到,在AngularJS中,一个Controller其实就是JavaScript中的一个函数。所以,Controller可以做事情是很多,它并通过$scope对象与模型关联,从而可以实现对模型的赋值以及其他相关逻辑行为的定义。
作用域
这里你看到了另一个重要对象$scope,作用域(Scope)是AngularJS的重要概念,它可以看做一种粘合剂,让模板,模型和控制器工作在一起。AngularJS通过作用域,以及模板中包含的信息,数据模型,控制器,让模型和视图保持位置的分离,内容的同步。任何对模型的改变都会反映到视图,任何视图的改变也会映射到模型中。
大部分Web应用都是基于MVC的模式,也衍生出许多中MVC的变种(如MVVM(Model View ViewModel)),但AngularJS宣称自己是MVW(Model View Whatever)。
在本节,最重要的是了解视图,模板,模型,控制器之间的关系,以及对作用域对象$scope有一个基本的了解。我们可以在之后一起去了解一下这个Whatever到底是什么含义。
本节中遇到的概念:
模板(Template) | 带有Angular扩展标记的HTML
指令(Directive) | 用于通过自定义属性和元素扩展HTML的行为
模型(Model) | 用于显示给用户并且与用户互动的数据
作用域(Scope) | 用来存储模型(Model)的语境(context)。模型放在这个语境中才能被控制器、指令和表达式等访问到
表达式(Expression) | 模板中可以通过它来访问作用域(Scope)中的变量和函数
视图(View) | 用户看到的内容(即DOM)
数据绑定(Data Binding) | 自动同步模型(Model)中的数据和视图(View)表现
控制器(Controller) | 视图(View)背后的业务逻辑
参考资料:
1.《精通AngularJS》
2.http://www.ngnice.com/docs/guide/concepts