AngularJS入門之如何快速上手
概述: AngularJS(ng)是一個純JS框架,AngularJS易於構建CRUD應用(CRUD意思是增刪改查)
適用於以資料操作為主的SPA(Single Page Application)應用。
基於jQuery對傳統的DOM操作進行進一步的封裝---使用MVC操作代替了所有的DOM操作。
不再是“先查詢元素再操作元素”,
所有的操作都是以“業務資料“為中心
搭建環境:
使用 AngularJS 的步驟:
1.引入必需的js檔案 : angular.js
2.為父元素宣告ngApp屬性(這裡的父元素一般指html)(系統會自動載入或啟動一個NG應用,這個ngApp是唯一的,只能有一個)
3.為父元素內部使用angularJS相關內容
4.
<!DOCTYPE html>
<html lang=
"en"
ng-app=
"haixin"
>
<head>
<meta charset=
"UTF-8"
>
<title>ng</title>
<!--[if lte IE
9
]>
<script src=
"public/js/html5shiv.min.js"
></script>
<script src=
"public/js/respond.min.js"
></script>
<![endif]-->
<script src=
"public/js/jquery-2.2.3.min.js"
></script>
<script src=
"public/js/bootstrap.js"
></script>
<script src=
"public/js/angular.js"
></script>
<link rel=
"stylesheet"
href=
"public/css/bootstrap.css"
>
<link rel=
"stylesheet"
href=
"public/css/animation.css"
>
</head>
<body>
</body>
</html>
ng四大特性:
1.採用MVC模式,頁面中再也無需出現DOM操作。
2.雙向資料繫結。
3.依賴注入
4.模組化設計
ng四大特性之一MVC模式:
(1)Model: 模型,指業務資料,web專案中由js變數擔當model。
(2)View: 檢視,使用者介面,HTML
(3)Controller: 控制器,Function
ng指令:
AngularJS 中ng模組提供的指令(directive)
(1) ngApp:自動載入/啟動一個AngularJS應用
(2) ngInit:用於宣告Model(模型)變數
(3) ngController:建立一個控制器物件的例項
(4) ngBind:在當前元素的innerHTML上輸入指定的表示式的值
(5) ngRepeat:為HTML增加迴圈功能,迴圈輸出當前元素
(6) ngIf:為HTML增加選擇功能,只有在表示式值為true時,當前元素才新增到DOM樹
(7) ngSrc:解決img等標籤的src屬性中包含{{}}產生的問題
語法: <img ng-src="路徑/{{表示式}}"/>
(8) ngClick: 為元素繫結監聽函式(不是全域性函式,而是Model函式)
語法: <ANY ng-click="模型函式()">
(9) 使用$scope.模型函式名 = function(){}格式來宣告模型函式
(10) ngStyle: 賦值為一個Model物件,用於為當前元素指定樣式
(11) ngShow/ngHide: 通過display:none/block來控制當前元素是否顯示
(12) ngDisabled: 賦值為true/false,可以控制當前元素是否禁用
(13) ngChecked: 賦值為true/false,可以控制當前元素是否選中
Angular中宣告變數——Model資料
有兩種方式可以宣告Model變數:
(1)使用ngInit指令宣告
ngInit 指令可以宣告為HTML元素的屬性或樣式
ngInit 指令宣告的Model變數可以先使用再宣告
ngInit 指令可以一次宣告多個Model變數,用分號隔開即可
ngInit 指令可以宣告哪些型別的Model變數:
number、string、boolean、物件、陣列、物件的陣列
注意:使用ngInit定義Model變數時不能使用new關鍵字;此方法
把View和Model混雜在一起,不推薦使用!
(2)使用Controller建立Model變數——推薦使用
建立Module <= 建立Controller <= 建立Model變數
注意:新版本的Angular要求控制器必須宣告在一個模組中!
具體步驟:
1)宣告一個自定義的模組(module)
angular.module('模組名', [ ])
2)在當前AngularJS應用中註冊自定義模組
ng-app="模組名"
3)在自定義模組中建立Controller函式,其中建立Model資料
$scope.模型變數名 = 值
4)在View中建立Controller物件的例項,指定其作用範圍
<標籤 ng-controller=“控制器名”>...控制器的有效範圍...</標籤>
5)在控制器的作用範圍內輸出Model變數
可以使用{{}}輸出Model變數的值開發人員來編寫
$scope $rootScope
(1)每個控制器的例項都對應一個作用範圍物件,即$scope
(2)在控制器中宣告的Model資料,必須儲存在一個作用範圍內
(3)一個HTML中可以宣告多個控制器例項,每個控制器都有自己的作用範圍,這些範圍內的資料彼此隔離不會互相影響,
可以由不同開發人員來編寫
(4)為了在多個控制器間共享資料,可以將Model資料儲存在一個“全域性作用範圍內”——$rootScope——整個AngularApp中
有且只有一個$rootScope物件,且此物件是所有 的$scope的父作用域物件
(5)作用域物件間可以實現繼承,只需要將某個控制器例項宣告在另一個控制器例項的有效作用域內部即可。
模組:
基本語法:
<script>
angular.module("haixin",[]).controller("方法名",function($scope){
$scope.mobile1="";
$scope.mobile2="";
})
</script>
控制器:
定義物件屬性:
<script>
function studentController($scope){
$scope.student={
stu1:"zhangsan",
stu2:"lisi"
}
}
</script>
控制器:
定義方法:
<script>
function studentController($scope){
$scope.student={
sName1:"zhangsan",
sName2:"lisi",
allName:function(){
var n;
n=$scope.student;
return n.sName1+""+n.sName2;
}
}
}
</script>
PS:小練習:
(1)建立一個新的頁面,其中宣告module、controller、model變數:一個學生物件,其中包含sname、gender、birthday、
score等屬性,在view中顯示這些model資料
(2)建立一個新的頁面,其中宣告module、controller、model變數:5個分陣列成的陣列,在view中的一個列表中輸出這5個數字
(3)五個商品的資料顯示在View中的table元素中,使用ngRepeat指令進行迴圈
案例答案:
<html lang=
"en"
ng-app=
"haixin"
>
<body>
<section ng-controller=
"practice"
>
<p>{{obj}}</p>
<ul>
<li ng-
repeat
=
"k in arr"
>{{k}}</li>
<li ng-
repeat
=
"(k,v) in arr"
>{{k}}:{{v}}</li>
</ul>
</section>
<section ng-controller=
"commodity"
>
<table class=
"table table-bordered table-hover text-center"
>
<th>序號</th><th>商品名字</th>
<th>商品價格</th><th>商品圖片</th>
<tr ng-
repeat
=
"i in arr1"
>
<td>{{$index+
1
}}</td>
<td>{{i.name}}</td>
<td>{{i.price}}</td>
<td><img ng-src=
"{{i.img}}"
width=
"60"
></td>
</tr>
</table>
<button class=
"btn btn-block btn-primary"
ng-click=
"add()"
>點選載入</button>
</section>
<script>
angular.module(
"haixin"
,[]).controller(
"practice"
,function($scope){
$scope.obj = new Object();
$scope.obj.name =
"Tom"
;
$scope.obj.gender =
"boy"
;
$scope.obj.birthday =
"4.18"
;
$scope.arr=[
10
,
20
,
30
];
}).controller(
"commodity"
,function ($scope) {
$scope.arr
1
=[
{name:
"商品1"
,price:
"77"
,img:
"images/1.jpg"
},
{name:
"商品2"
,price:
"33"
,img:
"images/2.jpg"
},
{name:
"商品3"
,price:
"55"
,img:
"images/3.jpg"
}
];
$scope.add=function () {
for(var i=
0
;i<
3
;i++){
var arr
2
={};
arr
2
.name=
"商品"
;
arr
2
.price=
"11"
;
arr
2
.img=
"images/"
+(
1
+i)+
".jpg"
;
$scope.arr
1
.push(arr
2
);
}
}
})
</script>
</body>
</html>
ng四大特性--雙向資料繫結:
方向一:把Model資料繫結到View上
把Model資料繫結到View上後,任何Model資料的修改,都會自動更新到View上({{ }}、ngBind、ngRepeat、
ngSrc...都實現了方向1的繫結)
方向二:把View繫結到Model上
把View資料繫結到Model後,任何View資料的修改,都會自動更新到Model上
此後不論任何時候,只要View中的資料一修改,Model中的資料會自動隨之修改。實現方法: 只有ngModel指令。
可以使用$scope.$watch(‘模型變數名’, fn)監視一個模型變數值的改變;單行文字輸入域、多行文字輸入域、下拉框、
單選按鈕控制元件預設會把自己的value屬性值繫結到一個Model變數;複選框會把一個true/false值繫結到一個Model變數。
ng模組中提供的服務(service)
(1)$rootScope: 用於在不同的控制器間共享資料
(2)$interval: 提供週期性定時器服務
(3)$interval.cancel(t):清除定時器
(4)$timeout: 提供一次性定時器服務
(5)$http: 發起非同步的Ajax請求服務
定時器小案例:input值改變的時候,控制檯也會改變,若只寫input和P的時候,input值改變的時候P的內容也跟著改變。
程式碼如下:
<input type=
"text"
ng-model=
"Uname"
>
<p>{{name}}</p>
<script>
$scope.$watch(
"Uname"
,function () {
console.log($scope.Uname);
})
</script>
PS:小練習
1:簡易版的點選次數計算器
2:簡易版的輪播廣告
3:用Bootstrap元件製作一個進度條(每隔0.2s,前進10%)取消定時:$interval.cancel(t);
4:簡易版的購物車
5:同意使用條款,則可以註冊,否則禁止註冊
6:簡易版模擬QQ選擇切換頭像
7:全選或取消全選(PS:4,5,6,7這四個小練習是雙向資料綁定了,直接加ng指令就可實現。下面案例中圖片
名字一律為n.jpg【n 為正整數】)
案例程式碼如下:
<html lang=
"en"
ng-app=
"haixin"
>
<body>
<section class=
"container"
>
<section ng-controller=
"lunbo"
>
<p>{{n}}</p>
<button class=
"btn btn-danger"
ng-click=
"fn()"
>點選加一</button><br/>
<img ng-src=
"images/{{img}}.jpg"
alt=
""
width=
"300"
>
<button class=
"btn btn-success"
ng-click=
"prev()"
>上一個</button>
<button class=
"btn btn-success"
ng-click=
"next()"
>下一個</button>
</section>
<section class=
"progress"
ng-controller=
"jindutiao"
>
<div class=
"progress-bar"
role=
"progressbar"
aria-valuenow=
"85"
aria-valuemin=
"0"
aria-valuemax=
"100"
ng-style=
"myStyle"
></div>
</section>
<section ng-controller=
"a2"
>
<form>
單價:<input type=
"number"
placeholder=
"請輸入價錢"
ng-model=
"price"
>
數量:<input type=
"number"
placeholder=
"請輸入數量"
ng-model=
"num"
>
小計:<span>{{price*num}}</span>
</form>
<input type=
"checkbox"
ng-model=
"agree"
>我同意本站的使用條款
<button class=
"btn btn-success"
ng-disabled=
"!agree"
>提交註冊</button>
<button class=
"btn btn-danger"
ng-if=
"agree"
>提交註冊</button>
<button class=
"btn btn-primary"
ng-
show
=
"agree"
>提交註冊</button>
<select ng-model=
"pic"
>
<option value=
"images/1.jpg"
>帥鍋</option>
<option value=
"images/2.jpg"
>蕾女</option>
<option value=
"images/3.jpg"
>大爺</option>
<option value=
"images/4.jpg"
>大叔</option>
</select>
<span><img ng-src={{pic}} width=
"200"
></span>
<aside>
<input type=
"checkbox"
ng-checked=
"checkAll"
>A
<input type=
"checkbox"
ng-checked=
"checkAll"
>B
<input type=
"checkbox"
ng-checked=
"checkAll"
>C
<input type=
"checkbox"
ng-model=
"checkAll"
>
<span ng-
hide
=
"checkAll"
>全選</span>
<span ng-
show
=
"checkAll"
>取消全選</span>
</aside>
</section>
</section>
<script>
angular.module(
"haixin"
,[]).controller(
"lunbo"
,function ($scope) {
$scope.n =
10
;
$scope.fn=function () {
$scope.n++;
};
$scope.img =
1
;
$scope.next=function () {
$scope.img++;
if($scope.img==
5
){
$scope.img=
1
;
}
};
$scope.prev=function () {
$scope.img--;
if($scope.img<
1
){
$scope.img=
4
;
}
}
}).controller(
"jindutiao"
,function ($scope,$interval) {
$scope.n=
10
;
$scope.myStyle={
"width"
:
"0%"
};
var t = $interval(function () {
$scope.myStyle.width=$scope.n+
"%"
;
$scope.n+=
10
;
if($scope.n==
90
){
$interval.cancel(t);
}
},
200
)
})
</script>
</body>
ng四大特性之—依賴注入:
依賴: Driver物件的建立和執行必需一個car物件,稱為Driver物件“依賴於”Car物件。依賴注入體現著“最少知識法則”
依賴物件的解決方法:
(1)主動建立
var c=new Car(); //建立被依賴的物件 var d=new Driver(c); //使用被依賴的物件
(2)被動注入(inject)
一般由特定框架來建立Driver物件,發現其依賴於一個Car物件,框架自動建立被依賴的Car物件——稱為“依賴注入”。
依賴注入的典型例子:
angular.module.controller('控制器名', function( $scope, $http ){ })
注意:
控制器物件的建構函式是由AngularJS來呼叫的,不能手動呼叫
Angular會根據控制器物件的建構函式的形參名來建立依賴的引數物件——形參名不能隨意指定!
若控制器物件未宣告形參,則Angular不會傳遞任何實參進來
控制器物件的形參名(PS:此處的形參名是不能夠隨意定的)必需是Angular可識別的,但數量和順序都沒有限制—Angular會
根據每一個形參的名稱來查詢建立被依賴的物件,並自動注入進來。
ng四大特性之—模組化設計:
模組化設計體現著“高內聚低耦合”設計原則。專案中,可以根據功能的不同,將不同的元件放置在不同的模組中
AngularJS中有兩種模組:
(1)AngularJS官方提供的模組:ng、ngRoute、ngAnimate、ngTouch、....
(2)使用者自定義的模組:userModule、productModule、orderModule、....
一個NG模組中可以包含多個元件:
(1)controller元件:用於維護模型資料
(2)directive元件:用於在View中輸出/繫結Model資料
(3)service元件:用於在不同的控制器中提供某種函式服務
(4)filter元件:用於對View中輸出的資料進行格式化
……..
Filter元件 (過濾器):
用於Model資料在View中呈現時進行某種格式的篩選/過濾/格式化。
在View中使用過濾器時,需要藉助於管道:|
ng模組中提供的過濾器:(ps:HH指的是24小時制)
(1)lowercase:把資料格式化為小寫
(2)uppercase:把資料格式化為大寫
(3)number:把數字型資料格式化為三位一個逗號的字元串同時指定小數點位數 eg: {{price | number : 2 }}
(4)currency:把數字型資料格式化為貨幣格式的字串,同時指定貨幣符號 eg: {{price | currency : '¥' }}
(5)date:把數字/Date型資料格式化為特定日期時間格式的字串
<p>{{name | lowercase}}</p> <p>{{name | uppercase}}</p> <p>{{num | number:2}}</p> <p>{{num | currency:"¥"}}</p> <p>{{time | date:"yyyy年MM月dd日 HH時mm分ss秒"}}</p> <p>{{time | date:"yyyy-MM-dd HH:mm:ss"}}</p>
PS案例:點選一個按鈕“載入員工資料”,向伺服器發起非同步的Ajax請求,獲取服務端的一段JSON資料,顯示在一個
表格中(注意資料格式);載入完資料後,按鈕即禁用/消失。
案例答案:
<!DOCTYPE html>
<html ng-app=
"haixin"
>
<head lang=
"en"
>
<meta charset=
"UTF-8"
>
<title>Title</title>
<link rel=
"stylesheet"
href=
"../css/bootstrap.css"
>
</head>
<body>
<section class=
"container"
ng-controller=
"a1"
>
<table class=
"table table-bordered table-hover"
>
<tr>
<th>序號</th>
<th>姓名</th>
<th>工資</th>
<th>入職日期</th>
</tr>
<tr ng-
repeat
=
"j in pro"
>
<td>{{$index+
1
}}</td>
<td>{{j.ename}}</td>
<td>{{j.salary |number}}</td>
<td>{{j.hiredate |date:
"yyyy年MM月dd日"
}}</td>
</tr>
</table>
<button ng-click=
"add()"
class=
"btn btn-block btn-success"
ng-disabled=
"tab"
>點選</button>
</section>
<script src=
"../js/jquery-1.11.3.js"
></script>
<script src=
"../js/bootstrap.js"
></script>
<script src=
"../js/angular.js"
></script>
<script>
angular.module(
"haixin"
,[]).controller(
"a1"
,function ($scope,$http) {
相關推薦
AngularJS入門之如何快速上手
概述: AngularJS(ng)是一個純JS框架,AngularJS易於構建CRUD應用(CRUD意思是增刪改查) 適用於以資料操作為主的SPA(Single Page Application)應用。基於jQuery對傳統的DOM操作進
入門之快速排序
問題 name spa names cnblogs turn 算法導論 div blog 1 /* 2 入門之快速排序 3 時間復雜度:O(nlogn) 4 最壞情況時時間復雜度能達到O(n^2) 5 借鑒自算法導論 6 */ 7 #include<i
排序算法入門之快速排序(java實現)
大小 ava 相對 其余 時間 個數 技術分享 算法 元素交換 快速排序也是一種分治的排序算法。快速排序和歸並排序是互補的:歸並排序將數組分成兩個子數組分別排序,並將有序的子數組歸並以將整個數組排序,會需要一個額外的數組;而快速排序的排序方式是當兩個子數組都有序
Solidity 語言簡易入門,快速上手!
Solidity語言簡介 solidity語言是一種可以編寫智慧合約的高階語言,當然編寫智慧合約不止這一種,但是學習以太坊最好還是學會這一種語言就差不多了。在以太坊平臺上,solidiy編寫的智慧合約會執行在以太坊虛擬機器EVM之上,變成位元組碼執行。 新手入門建議使用官方IDE開發工具Re
angularJs入門之購物車實現
這幾天在學習angularJs,勉強可以實現一個購物車。 我使用bootstrap框架以至於頁面不那麼醜 先放圖,再說具體過程 <!DOCTYPE html> <html> <head lang="en"> <meta
TensorFlow 之快速上手詳解
TensorFlow 基本使用簡述 一、概念簡述 1、學習目標 使用圖 (graph) 來表示計算任務. 在被稱之為 會話 (Session) 的上下文 (context) 中執行圖. 使用 tensor 表示資料. 通過 變數 (Va
SpringSecurity學習之快速上手
網際網路專案中,安全與許可權控制是不可迴避的問題,為了解決這一些列問題,許多安全框架應運而生了。這些框架旨在幫我們解決公用的安全問題,讓我們的程式更加健壯,從而讓程式設計師全身心投入到業務開發當中。那麼SpringSecurity出自於大名鼎鼎的Spring家族,同時能與SpringBoot,Spring
【筆記】webpack4.0教程_配置詳解_圖文_新手入門_快速上手
前言 這篇筆記會從node安裝開始,到搭建基礎的webpack環境為止。中間每一步的配置和遇到的術語、名詞,我都會做簡單的解釋。 同時,這篇博文是一篇記錄我學習webpack的過程筆記,因為我也在學習過程,如果有記述錯誤之處,歡迎指正。 【注:全程系統環境
react-native入門之快速入門---返回鍵實現
一、前言 React-native的趨勢已經是鐵板釘釘了。。。現在開始學習吧。 二、安裝 初始化專案: react-native init hello-rn 通過adb反向代理埠,將除錯的8081埠代理到測試機上 adb reverse tc
排序入門之快速排序簡單入門
本文章只是簡單講解快速排序的原理,並沒有深入進行討論 希望這篇文章適合你 :) 快速排序被廣泛認為它是解決一般問題的最佳排序演算法,它比較適合解決大規模資料的排序。 原理思想:(順序是從小到大) 快速排序首先選取一個“基準數”,通過基準數將大於它和小於它的數
MVC5開發前端框架AngularJS快速入門之Controller
先看看AngularJS官方對Controller的解釋 在Angular中,控制器就像 JavaScript 中的建構函式一般,是用來增強 Angular作用域(scope) 的。 當一個控制器通過 ng-controller 指令被新增到DOM中時,ng 會呼叫該控制
python編程快速上手之第10章實踐項目參考答案(11.11.2)
答案 nic .com final timeout pre image 保存圖片 iframe #!/usr/bin/env python # -*- coding:utf-8 -*- import os import re import urllib import
python編程快速上手之第10章實踐項目參考答案(11.11.3)
name driver ret text rul from url .get right from selenium import webdriver from selenium.webdriver.common.keys import Keys import time
python編程快速上手之第10章實踐項目參考答案(12.13.1)
true style span tip 12.1 user python input multi #! python3 # multiplicationTable.py import openpyxl,os from openpyxl.styles import Font
python編程快速上手之第13章實踐項目參考答案(13.6.1)
encrypted iter close ffi mes python編程 實踐項目 reader blog import os,PyPDF2 os.chdir(‘D:\\My Documents‘) for folderName, subfolders, filenam
python編程快速上手之第13章實踐項目參考答案(13.6.2)
nbsp python add sha odi log span import imp #! python3 # encoding: UTF-8 import os import docx from docx import Document from docx.shar
python編程快速上手之第15章實踐項目參考答案(17.7.2)
col ges code sid documents mod 編程 bsp tof #! python3 # Import modules and write comments to describe this program. import zipfile, os fr
python編程快速上手之第15章實踐項目參考答案(17.7.3)
lane width ima font height 開始 users nco window #! python3 # encoding: UTF-8 import os,docx from PIL import Image, ImageDraw from PIL imp
Laravel入門及實踐,快速上手社交系統ThinkSNS+二次開發
title 瀏覽器 extend 成了 migration 如果 編寫 三種 views 【摘要】自從社交系統ThinkSNS+不使用ThinkPHP框架而使用Laravel框架之後,很多人都說技術門檻擡高了,其實你與TS+的距離僅僅只是學習一個新框架而已,所以,我們今天來
【第二篇】ASP.NET MVC快速入門之數據註解(MVC5+EF6)
red 數據庫結構 varchar model 菜單 錯誤提示 edi 還需 問題 目錄 【第一篇】ASP.NET MVC快速入門之數據庫操作(MVC5+EF6) 【第二篇】ASP.NET MVC快速入門之數據註解(MVC5+EF6) 【第三篇】ASP.NET MVC快速入