從零學習Angularjs-編寫第一個Angularjs以及ng-指令大全
1.Angularjs的載入方式
當網頁載入完畢,AngularJS 自動開始執行; HTML 頁面中 ng-xxx 的屬性稱之為指令(Directive); ng-app 指令告訴 AngularJS, 元素是 AngularJS 應用程式管理的邊界; {{ }} 雙花括號裡面的叫做資料繫結表示式,可以是任何有效的JavaScript值、變數或語句。而在頁面上顯示的是表示式計算後的結果值。
舉個栗子:
<html ng-app>
<head></head>
<body>
{{"從零學習Angularjs-編寫第一個Angularjs" }}
</body>
</html>
2.Module.controller() 控制器
第二行程式碼建立了一個名為userCtrl的控制器,以及一個控制器函式
控制器函式接受一個名為$scope的引數
var app = angular.module(“myApp”, []); //myApp模組名 app是模組例項
app.controller(“userCtrl” ,function($scope){ //userCtrl是控制器的名字
$scope.name= “小明”; //$scope用來儲存資料,定義方法
});
3.ng-指令大全
(1)ng-model
ng-model 指令把文字框的值繫結到變數 name 上; {{ name }} 表示式就是把應用程式變數 name 繫結到某個dom元素的innerHTML。
請輸入你的名字:<input type="text" id="username" ng-model="name">
你的名字是: <span>{{name}}</span>
(2)ng-bind指令
ng-bind 指令將指定變數或表示式的值顯示在元素的innerHTML 如果給定的變數或表示式修改了,指定元素的 innerHTML 也會修改。
<input type="text" ng-model="text"> --將文字框的值繫結到text變數 你輸入的值是:
<span ng-bind="text"></span> --動態顯示text變數的值
(3)ng-init 指令
初始化應用時建立一個變數,並給變數賦值 ng-init 執行給定的表示式 建議用controller代替。
<div ng-app="" ng-init="myText='Hello World!'">
<h1>{{myText}}</h1>
(4)ng-click指令
Angular的點選事件處理器,給元素通過click事件繫結$scope物件的方法。
<input type="text" ng-model="text"> <button ng-click="show()">顯示輸入值</button>
$scope.show = function(){ alert("您輸入的內容是:" + $scope.text); }
(5)ng-repeat 指令
根據繫結陣列成員的數量,複製被繫結的元素 在ng-repeat指令複製元素的過程中,還提供了幾個專有變數:
$index 返回當前物件或屬性的下標
$first 當前物件為集合中的第一個物件時返回true
$last 當前物件為集合中的最後一個物件時返回true
$middle 當前物件既不是集合中第一個物件又不是最後一個物件返回true
$even 集合中的偶數編號返回true
$odd 集合中的奇數編號返回true ng-repeat-startng-repeat-end 重複生成多個頂層元素
(6)ng-class 指令
給元素新增CSS類:不能直接新增類名,需通過以下三種方式新增:
1. 直接繫結值為CSS類名的$scope物件屬性:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<link href="../../css/bootstrap.css" rel="stylesheet">
<style>
.red {
color: red;
}
</style>
</head>
<body ng-app="myApp">
<div ng-controller="listController">
<span ng-class="red1">小明</span>
</div>
<script src="../../script/angular.min.js"></script>
<script>
var app = angular.module("myApp", []);
app.controller("listController", function($scope) {
$scope.red1='red';
});
</script>
</body>
</html>
2. 以字串陣列方式選擇性新增CSS類 表示式
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
.style1 {
height: 200px;
width: 200px;
background: salmon;
}
.style2 {
background: violet;
}
</style>
</head>
<body>
<div ng-app ng-init="data={style1:true,style2:false}">
<!--ng-class指令會根據設定物件的情況決定是否新增某些class類名-->
<div ng-class="{style1:data.style1,style2:data.style2}"></div>
<!--<div ng-class="style1:true,style2:false"></div>-->
<input type="button" value="變化顏色" ng-click="data.style2 = !data.style2">
</div>
<script src="../../script/angular.min.js"></script>
<script>
var data = {
style1:true,
style2:false
}
</script>
</body>
</html>
3.通過key/value物件的方式新增多個CSS類
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<link href="../../css/bootstrap.css" rel="stylesheet">
<style>
.red {
color: red;
}
.green {
color: greenyellow;
}
</style>
</head>
<body ng-app="myApp">
<div ng-controller="listController">
<ul>
<li ng-repeat = "item in datas" ng-class="{red:item.startsWith('張')">{{ item }}
</li>
</ul>
</div>
<script src="../../script/angular.min.js"></script>
<script>
var app = angular.module("myApp", []);
app.controller("listController", function($scope) {
$scope.datas = ["張三","李四","王五","趙六","張"];
});
</script>
</body>
</html>
(7)ng-style 指令
ng-style 指令為 HTML 元素新增 style 屬性。 ng-style 屬性值必須是物件,表示式返回的也是物件 物件由 CSS 屬性和值註冊,即 key:value 。
ng-style=” {color: 'white'}”
(8)ng-show/ng-hide指令
ng-show 值為true或flase 顯示或隱藏元素 ng-hide 值為true或flase 隱藏或顯示元素。
(9)ng-if指令
從DOM中新增和移除元素 ng-if=”true”時保留元素 ng-if=“false”時移除元素。
(10)ng-swich指令
ng-switch-when =“” 值為指定value值的時候 顯示元素。
ng-switch-default 沒有匹配的value值時顯示元素。
(11)ng-link/ng-src指令
繫結元素的link或src地址 AngularJS 設定圖片地址的指令:ng-src AngularJS 程式碼執行前不顯示圖片。
(12)ng-include指令
該指令從伺服器獲取一段HTML片段,編譯並處理該片段中包含的任何angular指令,並新增到DOM元素中。
<ng-include src=" 'a.html' " ></ng-include>
src: 指定要載入內容的URL src的值必須為表示式 onload: 指定一個在內容被載入時呼叫的表示式 autoscroll:指定內容在載入時是否滾動到這部分檢視所在的區域。
(13)ng-cloak指令
使用一個CSS樣式隱藏內聯繫結表示式,(在文件第一次載入會短暫可見)。 ng-cloak 指令用於在 AngularJS 應用在載入時防止 AngularJS 程式碼未載入完而出現的問題。 AngularJS 應用在載入時,文件可能會由於AngularJS 程式碼未載入完而出現顯示 AngularJS 程式碼,進而會有閃爍的效果, ng-cloak 指令是為了防止該問題的發生。 該指令沒有引數。
<span ng-cloak>{{ 表示式 }}</span>
4.Module.directive自定義指令
指令是Angular最強大的特性,通過指令能擴充套件並增強HTML。 當內建指令無法滿足需求時,可以建立自定義指令。 自定義指令是通過Module.directive方法建立的。 Module.directive() 方法接受兩個引數,第一個是指令名,第二個是函式。 該函式用return語句返回另一個指令函式,使用該自定義指令,Angular就會呼叫這個函式。 指令函式接受三個引數,第一個scope,用於檢查在檢視中可用的資料。 第二個引數element是一個jqLite物件,jqLite是Angular提供一個剪裁版本的jQuery 第三個引數是attrs。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<link href="../../css/bootstrap.css" rel="stylesheet">
<script src="../../script/angular.min.js"></script>
<script>
var m= angular.module("my", [])
m.controller("ctr1", function ($scope) {
$scope.dayNames = ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六'];
$scope.today = $scope.dayNames[new Date().getDay()];
//getDay星期是從0開始的,星期日的下標是0
});
m.controller("ctr2", function ($scope) {
$scope.dayNames = ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六'];
$scope.tommorrow = $scope.dayNames[(new Date().getDay() + 1) % 7];
});
m.directive('highlight', function () {
return function (scope,element,attrs) {
if(scope.today == attrs['highlight']){
element.css("color",'red');
}else{
element.css("color",'green')
}
}
})
</script>
</head>
<body ng-app="my">
<div class="container">
<h2>今天是星期幾?</h2>
<p ng-controller="ctr1" highlight="星期二">今天是{{ today }}</p>
<p ng-controller="ctr2" highlight="星期一">明天是{{ tommorrow }}</p>
</div>
</body>
</html>