- 可以通過
angular.module()
方法操作模塊- 注意:該方法只有在傳入兩個參數時才會創建模塊,否則為獲取已有模塊
// 第一個參數為模塊名,第二個參數為當前這個模塊所依賴的模塊列表
angular.module('ModuleName', []);
var existModule = angular.module('ExistModule');
比如:
比如:
當下的企業開發,如果使用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);
$scope
之類的參數,必須確保參數名為一個特定值所以,最安全的寫法就是不要依賴參數名(依賴不會變化的東西):
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。
相同點:
不同點:
不同於以上的功能性指令,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");
});
}
});
在定義指令應該使用駝峰命名法,使用指令時應該使用的是全小寫字母中劃線分割的方式