AngularJS學(xué)習(xí)筆記

簡介:

AngularJS 是一個 JavaScript 框架。它可通過 <script> 標簽添加到 HTML 頁面烫葬。

<script src="http://apps.bdimg.com/libs/angular.js/1.4.6/angular.min.js"></script>

AngularJS 通過 指令 擴展了 HTML院喜,且通過 表達式 綁定數(shù)據(jù)到 HTML蔫仙。
擴展:

  • AngularJS 通過 ng-directives 擴展了 HTML鲸伴。
  • ng-app 指令定義一個 AngularJS 應(yīng)用程序。
  • ng-model 指令把元素值(比如輸入域的值)綁定到應(yīng)用程序灾票。
  • ng-bind 指令把應(yīng)用程序數(shù)據(jù)綁定到 HTML 視圖峡谊。
<div ng-app="">  
    <p>名字 : <input type="text" ng-model="name"></p>   
    <h1>Hello {{name}}</h1>
</div>

AngularJS 表達式
AngularJS 表達式寫在雙大括號內(nèi):{{ expression }}
AngularJS 表達式把數(shù)據(jù)綁定到 HTML,這與 ng-bind 指令有異曲同工之妙既们。
AngularJS 將在表達式書寫的位置"輸出"數(shù)據(jù)濒析。
AngularJS 表達式 很像 JavaScript 表達式:它們可以包含文字、運算符和變量啥纸。

AngularJS 應(yīng)用
AngularJS 模塊(Module) 定義了 AngularJS 應(yīng)用号杏。
AngularJS 控制器(Controller) 用于控制 AngularJS 應(yīng)用。
ng-app指令定義了應(yīng)用, ng-controller 定義了控制器斯棒。

<div ng-app="myApp" ng-controller="myCtrl">
    名: <input type="text" ng-model="firstName"><br>
    姓: <input type="text" ng-model="lastName"><br>
<br>
    姓名: {{firstName + " " + lastName}}
</div>
<script>
    var app = angular.module('myApp', []);
    app.controller('myCtrl', function($scope) {    
        $scope.firstName= "John";
        $scope.lastName= "Doe";
    });
</script>

AngularJS 表達式 與 JavaScript 表達式

  • 類似于 JavaScript 表達式盾致,AngularJS 表達式可以包含字母,操作符荣暮,變量庭惜。
  • 與 JavaScript 表達式不同,AngularJS 表達式可以寫在 HTML 中穗酥。
  • 與 JavaScript 表達式不同护赊,AngularJS 表達式不支持條件判斷,循環(huán)及異常砾跃。
  • 與 JavaScript 表達式不同骏啰,AngularJS 表達式支持過濾器。

重復(fù) HTML 元素
ng-repeat 指令會重復(fù)一個 HTML 元素:

<div ng-app="" ng-init="names=['Jani','Hege','Kai']">
  <p>使用 ng-repeat 來循環(huán)數(shù)組</p>
  <ul>
    <li ng-repeat="x in names">
      {{ x }}
    </li>
  </ul>
</div>

ng-init 指令
ng-init 指令為 AngularJS 應(yīng)用程序定義了 初始值抽高。
通常情況下判耕,不使用 ng-init。
ng-model 指令

  • ng-model 指令 綁定 HTML 元素 到應(yīng)用程序數(shù)據(jù)翘骂。
  • ng-model 指令也可以:
    • 為應(yīng)用程序數(shù)據(jù)提供類型驗證(number壁熄、email、required)雏胃。
    • 為應(yīng)用程序數(shù)據(jù)提供狀態(tài)(invalid、dirty志鞍、touched瞭亮、error)。
    • 為 HTML 元素提供 CSS 類固棚。
    • 綁定 HTML 元素到 HTML 表單统翩。

創(chuàng)建自定義的指令

除了 AngularJS 內(nèi)置的指令外,我們還可以創(chuàng)建自定義指令此洲。你可以使用 .directive 函數(shù)來添加自定義的指令厂汗。要調(diào)用自定義指令,HTMl 元素上需要添加自定義指令名呜师。
使用駝峰法來命名一個指令娶桦, runoobDirective, 但在使用它時需要以 - 分割, runoob-directive:

<body ng-app="myApp">
    <runoob-directive></runoob-directive>
<script>
    var app = angular.module("myApp", []);
    app.directive("runoobDirective", function() {
        return {
            template : "<h1>自定義指令!</h1>"
        };
});
</script>
</body>

你可以通過以下方式來調(diào)用指令:

  • 元素名 <runoob-directive></runoob-directive>
  • 屬性<div runoob-directive></div>
  • 類名<div class="runoob-directive"></div>

注意: 你必須設(shè)置 restrict 的值為 "C" 才能通過類名來調(diào)用指令

  • 注釋``

注意: 我們需要在該實例添加 replace 屬性, 否則評論是不可見的。
注意: 你必須設(shè)置 restrict 的值為 "M" 才能通過注釋來調(diào)用指令衷畦。

限制使用
你可以限制你的指令只能通過特定的方式來調(diào)用栗涂。
restrict 值可以是以下幾種:

  • E 只限元素名使用
  • A 只限屬性使用
  • C 只限類名使用
  • M 只限注釋使用

restrict 默認值為 EA, 即可以通過元素名和屬性名來調(diào)用指令。

表單驗證<AngularJs>

在看教程的時候發(fā)現(xiàn)了

<form ng-app="" name="myForm">
    Email:
    <input type="email" name="myAddress" ng-model="text">
    <span ng-show="myForm.myAddress.$error.email">不是一個合法的郵箱地址</span>
</form>

覺得很神奇祈争。

應(yīng)用狀態(tài)
ng-model 指令可以為應(yīng)用數(shù)據(jù)提供狀態(tài)值(invalid, dirty, touched, error)

 <form ng-app="" name="myForm" ng-init="myText = 'test@runoob.com'">
 Email:    <input type="email" name="myAddress" ng-model="myText" required>
    <h1>狀態(tài)</h1>
    {{myForm.myAddress.$valid}}
    {{myForm.myAddress.$dirty}}
    {{myForm.myAddress.$touched}}
</form>

CSS 類
ng-model 指令基于它們的狀態(tài)為 HTML 元素提供了 CSS 類:

<style>
input.ng-invalid {
    background-color: lightblue;
}
</style>
    <form ng-app="" name="myForm">
    輸入你的名字:
    <input name="myAddress" ng-model="text" required>
   </form>

ng-model 指令根據(jù)表單域的狀態(tài)添加/移除以下類:

  • ng-empty
  • ng-not-empty
  • ng-touched
  • ng-untouched
  • ng-valid
  • ng-invalid
  • ng-dirty
  • ng-pending
  • ng-pristine

AngularJS 控制器

AngularJS 應(yīng)用程序被控制器控制斤程。
ng-controller 指令定義了應(yīng)用程序控制器。
控制器是 JavaScript 對象菩混,由標準的 JavaScript 對象的構(gòu)造函數(shù) 創(chuàng)建忿墅。

AngularJS 過濾器

過濾器可以使用一個管道字符(|)添加到表達式和指令中。
管道字符

  • uppercase 過濾器將字符串格式化為大寫
<div ng-app="myApp" ng-controller="personCtrl">
    <p>姓名為 {{ lastName | uppercase }}</p>
</div>
  • currency 過濾器將數(shù)字格式化為貨幣格式

向指令添加過濾器

  • orderBy 過濾器根據(jù)表達式排列數(shù)組
<ul>
  <li ng-repeat="x in names | orderBy:'country'">
    {{ x.name + ', ' + x.country }} 
 </li>
</ul>

過濾輸入
輸入過濾器可以通過一個管道字符(|)和一個過濾器添加到指令中沮峡,該過濾器后跟一個冒號和一個模型名稱疚脐。
filter 過濾器從數(shù)組中選擇一個子集

<p><input type="text" ng-model="mtest"></p>
<ul>
  <li ng-repeat="x in names | filter:mtest | orderBy:'country'">
    {{ (x.name | uppercase) + ', ' + x.country }}
  </li>
</ul>

AngularJS 服務(wù)(Service)

AngularJS 中你可以創(chuàng)建自己的服務(wù),或使用內(nèi)建服務(wù)帖烘。
什么是服務(wù)亮曹?
在 AngularJS 中,服務(wù)是一個函數(shù)或?qū)ο竺刂ⅲ稍谀愕?AngularJS 應(yīng)用中使用照卦。
AngularJS 內(nèi)建了30 多個服務(wù)。
有個 $location 服務(wù)乡摹,它可以返回當(dāng)前頁面的 URL 地址役耕。

為什么使用服務(wù)?
$http 是 AngularJS 應(yīng)用中最常用的服務(wù)。服務(wù)向服務(wù)器發(fā)送請求聪廉,應(yīng)用響應(yīng)服務(wù)器傳送過來的數(shù)據(jù)瞬痘。
AngularJS 會一直監(jiān)控應(yīng)用,處理事件變化板熊, AngularJS 使用 $location 服務(wù)比使用 window.location 對象更好框全。

  • $http 服務(wù)
    $http 是 AngularJS 應(yīng)用中最常用的服務(wù)。 服務(wù)向服務(wù)器發(fā)送請求干签,應(yīng)用響應(yīng)服務(wù)器傳送過來的數(shù)據(jù)津辩。
var app = angular.module('myApp',[]);
    app.controller('myCtrl', function($scope, $http) {   
         $http.get("welcome.htm").then(function (response) { 
         $scope.myWelcome = response.data; 
   });
});
  • $timeout 服務(wù)
    AngularJS $timeout 服務(wù)對應(yīng)了 JS window.setTimeout 函數(shù)。
var app = angular.module('myApp', []);
app.controller('myCtrl', function($scope, $timeout) {     
    $scope.myHeader = "Hello World!";
    $timeout(function () {         
       $scope.myHeader = "How are you today?";
    }, 2000);
});
  • $interval 服務(wù)
    AngularJS $interval 服務(wù)對應(yīng)了 JS window.setInterval 函數(shù)
var app = angular.module('myApp', []);
    app.controller('myCtrl', function($scope, $interval) {    
        $scope.theTime = new Date().toLocaleTimeString();    
        $interval(function () {
            $scope.theTime = new Date().toLocaleTimeString();
    }, 1000);
});
  • 創(chuàng)建自定義服務(wù)
創(chuàng)建名為**hexafy** 的訪問:
app.service('hexafy', function() {
    this.myFunc = function (x) {
        return x.toString(16);
    }});
使用自定義的的服務(wù) **hexafy** 將一個數(shù)字轉(zhuǎn)換為16進制數(shù):
app.controller('myCtrl', function($scope, **hexafy**) {
    $scope.hex = **hexafy**.myFunc(255);
});
  • 過濾器中容劳,使用自定義服務(wù)
在過濾器 **myFormat** 中使用服務(wù) **hexafy**:
app.filter('myFormat',['hexify', function(hexify){ 
   return function(x) { 
       return hexify.myFunc(x);
    };
}]);

AngularJS XMLHttpRequest

$http 是 AngularJS 中的一個核心服務(wù)喘沿,用于讀取遠程服務(wù)器的數(shù)據(jù)。

$http.get("");

AngularJS Select(選擇框)

  • AngularJS 可以使用數(shù)組或?qū)ο髣?chuàng)建一個下拉列表選項竭贩。
<select ng-model="selectedName" ng-options="x for x in names"></select>
app.controller('myCtrl', function($scope) {
    $scope.names = ["Google", "Runoob", "Taobao"];
});
  • ng-repeat
    我們也可以使用ng-repeat 指令來創(chuàng)建下拉列表
<select>
<option ng-repeat="x in names">{{x}}</option>
</select>

ng-repeat 指令是通過數(shù)組來循環(huán) HTML 代碼來創(chuàng)建下拉列表蚜印,但 ng-options 指令更適合創(chuàng)建下拉列表,它有以下優(yōu)勢:
使用 ng-options 的選項的一個對象留量, ng-repeat 是一個字符串窄赋。

AngularJS 表格

ng-repeat 指令可以完美的顯示表格哟冬。

  • 在表格中顯示數(shù)據(jù)
<table>
  <tr ng-repeat="x in names">
    <td>{{ x.Name }}</td>
    <td>{{ x.Country }}</td>
  </tr>
</table>

AngularJS HTML DOM

  • ng-disabled 指令
    ng-disabled 指令直接綁定應(yīng)用程序數(shù)據(jù)到 HTML 的 disabled 屬性。
<div ng-app="" ng-init="mySwitch=true">
    <p><button ng-disabled="mySwitch">點我!</button></p>
    <p><input type="checkbox" ng-model="mySwitch">按鈕</p>
    <p>{{ mySwitch }}</p>
</div>
  • ng-show 指令
    ng-show 指令隱藏或顯示一個 HTML 元素寝凌。
<div ng-app="">
    <p ng-show="true">我是可見的柒傻。</p>
    <p ng-show="false">我是不可見的。</p>
</div>
  • ng-hide 指令
    ng-hide 指令用于隱藏或顯示 HTML 元素较木。
<div ng-app="">
    <p ng-hide="true">我是不可見的红符。</p>
    <p ng-hide="false">我是可見的。</p>
</div>

AngularJS 事件

  • ng-click 指令
    ng-click 指令定義了 AngularJS 點擊事件伐债。
<button ng-click="count = count + 1">點我预侯!</button>
<p>{{ count }}</p>

AngularJS 模塊

模塊定義了一個應(yīng)用程序。
模塊是應(yīng)用程序中不同部分的容器峰锁。
模塊是應(yīng)用控制器的容器萎馅。
控制器通常屬于一個模塊。

  • 創(chuàng)建模塊
<script>
var app = angular.module("myApp", []); 
</script>

在模塊定義中 [] 參數(shù)用于定義模塊的依賴關(guān)系虹蒋。中括號[]表示該模塊沒有依賴糜芳,如果有依賴的話會在中括號寫上依賴的模塊名字。

  • 添加控制器
    你可以使用 ng-controller 指令來添加應(yīng)用的控制器
var app = angular.module("myApp", []);
    app.controller("myCtrl", function($scope) { 
       // statement; 
});
  • 函數(shù)會影響到全局命名空間
    JavaScript 中應(yīng)避免使用全局函數(shù)魄衅。因為他們很容易被其他腳本文件覆蓋峭竣。
    AngularJS 模塊讓所有函數(shù)的作用域在該模塊下,避免了該問題晃虫。

  • 什么時候載入庫?
    在我們的實例中皆撩,所有 AngularJS 庫都在 HTML 文檔的頭部載入。
    對于 HTML 應(yīng)用程序哲银,通常建議把所有的腳本都放置在 <body> 元素的最底部扛吞。
    這會提高網(wǎng)頁加載速度,因為 HTML 加載不受制于腳本加載荆责。
    在我們的多個 AngularJS 實例中滥比,您將看到 AngularJS 庫是在文檔的 <head> 區(qū)域被加載。
    在我們的實例中做院,AngularJS 在 <head> 元素中被加載盲泛,因為對 angular.module 的調(diào)用只能在庫加載完成后才能進行。
    另一個解決方案是在 <body> 元素中加載 AngularJS 庫山憨,但是必須放置在您的 AngularJS 腳本前面

AngularJS 包含

在 AngularJS 中查乒,你可以在 HTML 中包含 HTML 文件弥喉。

  • AngularJS 包含
    使用 AngularJS, 你可以使用 ng-include 指令來包含 HTML 內(nèi)容:
<body><div class="container">
  <div ng-include="'myUsers_List.htm'"></div>
      <div ng-include="'myUsers_Form.htm'"></div>
</div>
</body>

AngularJS 動畫

AngularJS 提供了動畫效果郁竟,可以配合 CSS 使用。
AngularJS 使用動畫需要引入 angular-animate.min.js 庫由境。

<script src="http://apps.bdimg.com/libs/angular.js/1.4.6/angular-animate.min.js"></script>

還需在應(yīng)用中使用模型 ngAnimate

<body ng-app="ngAnimate">

以上是AngularJS菜鳥教程的整理棚亩,下面會是一些在使用Angular過程中學(xué)習(xí)到的新東西

ng-class的用法

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末蓖议,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子讥蟆,更是在濱河造成了極大的恐慌勒虾,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,548評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件瘸彤,死亡現(xiàn)場離奇詭異修然,居然都是意外死亡,警方通過查閱死者的電腦和手機质况,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,497評論 3 399
  • 文/潘曉璐 我一進店門愕宋,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人结榄,你說我怎么就攤上這事中贝。” “怎么了臼朗?”我有些...
    開封第一講書人閱讀 167,990評論 0 360
  • 文/不壞的土叔 我叫張陵邻寿,是天一觀的道長。 經(jīng)常有香客問我视哑,道長绣否,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,618評論 1 296
  • 正文 為了忘掉前任黎炉,我火速辦了婚禮枝秤,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘慷嗜。我一直安慰自己淀弹,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 68,618評論 6 397
  • 文/花漫 我一把揭開白布庆械。 她就那樣靜靜地躺著薇溃,像睡著了一般。 火紅的嫁衣襯著肌膚如雪缭乘。 梳的紋絲不亂的頭發(fā)上沐序,一...
    開封第一講書人閱讀 52,246評論 1 308
  • 那天,我揣著相機與錄音堕绩,去河邊找鬼策幼。 笑死,一個胖子當(dāng)著我的面吹牛奴紧,可吹牛的內(nèi)容都是我干的特姐。 我是一名探鬼主播,決...
    沈念sama閱讀 40,819評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼黍氮,長吁一口氣:“原來是場噩夢啊……” “哼唐含!你這毒婦竟也來了浅浮?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,725評論 0 276
  • 序言:老撾萬榮一對情侶失蹤捷枯,失蹤者是張志新(化名)和其女友劉穎滚秩,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體淮捆,經(jīng)...
    沈念sama閱讀 46,268評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡郁油,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,356評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了攀痊。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片已艰。...
    茶點故事閱讀 40,488評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖蚕苇,靈堂內(nèi)的尸體忽然破棺而出哩掺,到底是詐尸還是另有隱情,我是刑警寧澤涩笤,帶...
    沈念sama閱讀 36,181評論 5 350
  • 正文 年R本政府宣布嚼吞,位于F島的核電站,受9級特大地震影響蹬碧,放射性物質(zhì)發(fā)生泄漏舱禽。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,862評論 3 333
  • 文/蒙蒙 一恩沽、第九天 我趴在偏房一處隱蔽的房頂上張望誊稚。 院中可真熱鬧,春花似錦罗心、人聲如沸里伯。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,331評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽疾瓮。三九已至,卻和暖如春飒箭,著一層夾襖步出監(jiān)牢的瞬間狼电,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,445評論 1 272
  • 我被黑心中介騙來泰國打工弦蹂, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留肩碟,地道東北人。 一個月前我還...
    沈念sama閱讀 48,897評論 3 376
  • 正文 我出身青樓凸椿,卻偏偏與公主長得像削祈,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子削饵,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,500評論 2 359

推薦閱讀更多精彩內(nèi)容

  • 1. 介紹 AngularJS是一款由Google公司開發(fā)維護的前端MVC框架岩瘦,其克服了HTML在構(gòu)建應(yīng)用上的諸多...
    崔皓翔閱讀 846評論 0 5
  • 1、什么是angularjs AngularJS是一個框架(諸多類庫的集合)以數(shù)據(jù)和邏輯做為驅(qū)動(核心)窿撬。 Ang...
    margery閱讀 313評論 0 0
  • AngularJS是什么启昧?AngularJs(后面就簡稱ng了)是一個用于設(shè)計動態(tài)web應(yīng)用的結(jié)構(gòu)框架。首先劈伴,它是...
    200813閱讀 1,611評論 0 3
  • ng-model 指令ng-model 指令 綁定 HTML 元素 到應(yīng)用程序數(shù)據(jù)密末。ng-model 指令也可以:...
    壬萬er閱讀 875評論 0 2
  • 養(yǎng)多肉已經(jīng)有一段時間,越來越喜歡跛璧,越來越覺得有樂趣严里。肉肉們讓我爬出生活的深淵,讓我的心情重新回歸寧靜追城,入了...
    春天的蟲蟲閱讀 332評論 0 0