前言:Angular的特点之一是采用MVC(MV*)模式,M 即 model 模型,V 即 view 视图,C 即 controller 控制器。model是用来存放数据的,controller处理数据,view呈递数据。controller对model中的数据进行业务处理,再暴露给view。
上一篇创建了模块,模块需要配合控制器controller使用。本案例阐述如何创建控制器controller。
一、创建controller
程序清单1:
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>hello, Angular!</title> 6 <script src="angular.js"></script> 7 <script type="text/javascript"> 8 var app = angular.module('myapp', []); 9 // 创建控制器 10 app.controller('ctrl',function($scope){ 11 $scope.message = 'hello, angular!'; 12 console.log($scope.message); 13 }); 14 </script> 15 </head> 16 <!-- 给dom元素添加module和controller --> 17 <body ng-app="myapp" ng-controller="ctrl"> 18 </body> 19 </html>
案例详解:
1. 语法:
app.controller('ctrl',function(){});
第一个参数是controller的名字,第二个参数是调用该controller时自动执行的函数。 由于控制器是出现在某个模块下的,创建控制器之前必须创建模块。
将controller应用到HTML元素,给元素添ng-controller指令。
二、controller的参数问题?
创建controller时参数的标准写法:
程序清单2:
1 // 标准写法 2 app.controller('myctrl', ['$scope', '$http', function($scope,$http){ 3 console.log($scope); 4 console.log($http); 5 } 6 ]);
app.controller('名字',['para1','param2',function(param1, param2){}]);
第二个参数是一个数组,数组的最后一个元素是回调函数,前面的元素是注入给回调函数的对象的名字。这么做是因为angular内置了一些对象供我们使用,他们的名字是固定的,考虑到代码混淆会改变形参的名称,这种方法回避了该问题。一定要使用这种写法。