Angular 是一个流行的JavaScript框架,以其丰富的数据绑定功能而闻名。Angular的核心是数据绑定,它使得HTML和JavaScript对象之间的交互变得非常简单。Angular团队将其命名为MVW框架,其中"M"代表JavaScript对象,"V"代表HTML UI,"W"代表绑定模型和UI的代码。在本教程中,将通过16个章节详细介绍所有可能的实践步骤。
首先,将创建一个简单的项目并引入Angular。在Visual Studio中创建任何项目时,它总是带有微软的标志。为了保持Angular的纯粹性,希望创建一个没有微软标志的简单项目,但同时希望获得Visual Studio intellisense的好处。这个项目将只包含HTML、CSS、JS文件和Angular文件。在硬盘上创建一个简单的文件夹,打开Visual Studio,点击文件->打开->网站,如下面的图所示。当以网站的形式打开一个文件夹时,Visual Studio不会添加不必要的文件,如web.config和global.asax文件等。
完成之后,将看到一个非常简单的项目,它没有任何东西。它只是一个没有微软特定文件的简单项目。在这个项目中,让添加一个简单的HTML页面,并将其命名为"HelloWorld.html"。在这个HTML页面中,将创建一个名为"txtHello"的简单输入文本框,这个文本框将与"Hello"JavaScript函数/类绑定。
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>
</title>
</head>
<script>
function Hello() {
this.txthello = "HELLO WORLD";
}
</script>
<body>
<div id="HelloWorldScreen">
<input id="txthello" type="text" />
<br />
<br />
</div>
</body>
</html>
现在已经准备好了HTML UI和JavaScript类,让首先获取AngularJS框架。右键单击项目,然后点击管理NuGet包,如下面的图所示:在搜索文本框中搜索Angular,并从列表中安装“AngularJS”核心。可以看到很多其他Angular包,这些是Angular的扩展。将逐步看到其他包。最重要的是Angular核心,所以点击安装并获取它。
在安装过程中,将出现下面的对话框(选择项目),点击确定。安装完成后,可以看到Angular文件在scripts文件夹中。现在使用script标签引用“Angular”文件,如下所示(见粗体行)。
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>
</title>
</head>
<script src="Scripts/angular.js">
</script>
..... 代码已简化
现在为了将“HelloWorld”类与hello HTML文本框绑定,需要做两件事:创建一个“HelloWorld”类的实例。其次,将“HelloWorld”对象的属性设置为文本框。为此,需要使用“ng-controller”和“ng-model”。“ng-controller”和“ng-model”被称为指令。记住Angular是一种声明式编程语言。声明式意味着只需应用指令,事情就会工作。如果对这种声明式工作不熟悉,建议快速查看下面的视频链接,其中用一个例子进行了解释。
“ng-controller”指令创建了一个“Helloworld”控制器的对象,并将其与UI DIV标签绑定,“ng-model”将属性与文本框与“txtHello”属性绑定。要将属性显示在屏幕上,需要使用表达式“{{}}”,如下所示。因此,当在文本框“txthello”中输入时,它将显示在“div1”标签内。
<div id="HelloWorldScreen" ng-controller="HelloWorld">
<input ng-model="txthello" id="txthello" type="text"/><br /><br />
<div id="div1">{{txthello}}</div>
</div>
如果“ng-controller”指令创建实例,那么如果HTML页面中有多个“ng-controller”指令,会发生什么?它会创建两个实例还是一个实例?思考一下……
显然,作为开发人员,希望不同的“HelloWorld”实例与两个DIV HTML UI绑定。这正是AngularJS所做的,因为它创建了两个不同的实例。但现在,如果在同一HTML页面中有两个实例,这两个实例的作用域是什么,是整个HTML页面还是其他什么?
这两个实例的作用域是
“ng-app”创建了一个顶级对象,它控制所有控制器对象,并且它们也有助于在控制器实例之间共享数据。
<body ng-app="myApp">
<div id="HelloWorldScreen" ng-controller="HelloWorld">
<!-- 代码已简化 -->
</div>
</body>
现在已经设置好了,需要一些代码来帮助Angular启动。希望Angular开始创建控制器对象,ng-app对象并进行绑定。所以需要两行代码,如下所示。第一行创建应用程序实例,第二行将控制器对象添加到应用程序中。
var myApp = angular.module("myApp", []);
myApp.controller("HelloWorld", Hello);
就是这样,按Ctrl + F5查看自动绑定的效果。当在文本框中输入时,表达式会更新。
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>
</title>
</head>
<script src="Scripts/angular.js">
</script>
<script>
function Hello($scope) {
$scope.txthello = "HELLO WORLD";
}
var myApp = angular.module("myApp", []);
myApp.controller("HelloWorld", Hello);
</script>
<body ng-app="myApp">
<div id="HelloWorldScreen" ng-controller="HelloWorld">
<input ng-model="txthello" id="txthello" type="text"/>
<br />
<br />
<div id="div1">{{txthello}}</div>
</div>
</body>
</html>