- AngularJS入门与进阶
- 江荣波
- 468字
- 2020-11-28 23:44:30
3.3 使用MVC思想重构价格计算器程序
通过前面两节的学习,我们了解了MVC架构模式的概念及AngularJS框架中控制器的声明与实例化,本节我们就使用所学的知识,以MVC设计思想对第2章的价格计算器程序进行重构,完整案例代码如下:
代码清单:ch03\ch03_01.html
<!doctype html> <html ng-app="app"> <head> <meta charset="UTF-8"> <title>ch03_01</title> <script type="text/javascript" src="../angular-1.5.5/angular.js"> </script> </head> <body ng-controller="CalcController"> <div>单价:<input type="number" ng-model="price" /></div><br/> <div>数量:<input type="number" ng-model="num" /></div><br/> <div>总价:{{totalPrice()}}</div> <script type="text/javascript"> function CalcController($scope){ $scope.price = 10; $scope.num = 1; $scope.totalPrice = function() { return $scope.price * $scope.num; } } var app = angular.module("app", []); app.controller("CalcController", CalcController); </script> </body> </html>
在浏览器中运行ch03_01.html页面,效果和第2章的价格计算器完全相同,不同的是视图中表达式运算操作转移到了控制器中。下面对该段代码进行分析:
ng-controller指令用于实例化控制器对象,当AngularJS框架遇到ng-controller指令时会查找名为CalcController的构造方法实例化构造器对象。
控制器对象实例化时AngularJS会创建一个新的作用域对象,名称为$scope,然后会把$scope对象注入控制器对象中。
接下来使用ng-model指令在作用域对象$scope和input表单之间建立数据绑定,这样在控制器中就能够通过$scope对象访问表单数据了。
我们在控制器中指定$scope对象的price和num属性值初始值分别为10和1,在页面加载时会自动回显到输入框中,所以页面加载时表单中的初始值分别为10、1。
最后在作用域对象中增加一个totalPrice()方法,用于计算价格总和,然后通过AngularJS表达式调用该业务逻辑方法即可。