// 第一个参数为模块名,第二个参数为当前这个模块所依赖的模块列表angular.module('ModuleName', []);
var existModule = angular.module('ExistModule');
比如: - 注册模块 - 登录模块 - 用户列表页模块 - 用户详细页模块 - etc.
比如: - 所有的控制器 - 所有的服务 - 所有的指令 - etc.
当下的企业开发,如果使用Angular,主要就是开发对应的控制器和模型
定义控制器可以有三种方式,注意第一种已经被淘汰
在最早期的 Angular 代码中可能会见到以全局函数的方式定义的控制器:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>早期的控制器定义方式-全局函数</title></head> <body ng-app> <div ng-controller="FooController"> <input type="button" value="clicked me!" ng-click="say()"> </div></body> </html>
function FooController($scope) { $scope.say = function(){ console.log('hello angular'); };}
这种方式现在已经不被支持,就算没有淘汰也不应该使用,太low(全局作用域的问题)
Angular中最常见的一种使用方式,通过模块中定义的 controller 方法定义控制器
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>常用方式(挂载在某个模块下)</title></head> <body ng-app="MyModule"> <div ng-controller="FooController"> <input type="button" value="clicked me!" ng-click="say()"> </div></body> </html>
angular.module('MyModule', []) .controller('FooController', function($scope) { $scope.say = function(){ console.log('hello angular'); }; });
对于喜欢通过定义构造函数的方式编写面向对象代码的同学可以使用构造函数的形式定义一个控制器
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>面向对象的方式</title></head> <body ng-app="MyModule"> <div ng-controller="FooController as context"> <input type="button" value="clicked me!" ng-click="context.say()"> </div></body> </html>
function FooController() { this.message = 'hello angular';}FooController.prototype.say = function() { console.log(this.message);};angular.module('MyModule', []) .controller('FooController', FooController);
angular.module('MyModule', []) .controller('FooController', ['$scope', function(whatever) { whatever.say = function(){ console.log('hello angular'); }; }]);
解决方式就是将创建控制器的第二个参数改为一个数组,数组的最后一个成员就是以前的控制器函数,前面的成员就是控制器函数需要注入的对象列表,按照顺序对应
如何根据参数名传入特定对象?
function getFnParams(fn) { if (typeof fn == 'function') { var mathes = /.+\((.+)\)/.exec(Function.prototype.toString.call(fn)); if (mathes[1]) { var args = mathes[1].replace(/\s/g, '').split(','); return args; } }}function foo(id, name, a1ge) {}console.log(getFnParams(foo));
大家必须掌握的就是如何根据一个原型抽象出对应的视图模型
类似于模版引擎的语法
使用表达式把数据绑定到 HTML。
相同点: - AngularJS 表达式可以包含字母,操作符,变量。
不同点: - AngularJS 表达式可以写在 HTML 中。 - AngularJS 表达式不支持条件判断,循环及异常。 - AngularJS 表达式支持过滤器。
不同于以上的功能性指令,Angular还定义了一些用于和事件绑定的指令:
myModule.directive('hello', function() { return { restrict: 'E', template: '<h1>Hello world</h1>', replace: true };});
myApp.directive("ngHover", function() { return function(scope, element, attrs) { element.bind("mouseenter", function() { element.css("background", "yellow"); }); element.bind("mouseleave", function() { element.css("background", "none"); }); }});
在定义指令应该使用驼峰命名法,使用指令时应该使用的是全小写字母中划线分割的方式