AngularJS – 跟著Google玩網頁!

今天馬老師要與大家分享的是一個前端開發的函式庫AngularJS,前面的文章中都有提到,因為近年來行動裝置的普及讓Javascript大為活躍,不過傳統的Javascript在相容性上、操作上都非常的不方便,所以才有了許許多多Javascript的函式庫與框架的誕生,例如:jQuery、KnockoutJS、GSAP、PaperJS…等,每個Javascript的函式庫和框架的大小、作用和目的都不盡相同,有的是為了特效;有的則是為了方便操作,那今天為何要跟大家分享AngularJS呢?因為…它是名牌!

AngularJS 示意圖

為何說AngularJS是名牌呢?因為目前他是由Google來負責維護。初始版本是在2009年誕生的,比jQuery晚了三年,言下之意就會比jQuery好嗎?當然也不能這麼說,jQuery在目前還是一個非常火燙的前端開發函式庫,應該要說他們兩個在使用的架構和目的上會有所不同,這篇文章也來比較一下同樣的案例,在兩種語法上面撰寫的不同。

AngularJS 官方網頁截圖
AngularJS 官方網頁截圖

不過首先我們要知道基本的AngularJS開發方式,今天的案例我們利用JS Bin的線上開發網頁來說明,大家也可以到這個平台上來試著玩看看!如果需要利用AngularJS開發自己的網頁,也可以到AngularJS的官方網頁把JS下載到資料夾之後引用到網頁裡。

1. 首先點選Add library後選擇AngularJS Stable,這樣該平台就會加入AngularJS的函式庫進入頁面。

AngularJS JS Bin Add Library
AngularJS JS Bin Add Library

2. 在標籤中,加入ng-app的屬性,讓整份文件都可以使用AngularJS。

AngularJS JS Bin 增加 HTML 屬性
AngularJS JS Bin 增加 HTML 屬性

3. 接下來就可以在左手邊body標籤內開始輸入一些程式碼來測試,AngularJS在輸出方面有個基本的結構式「{{ }}」,大家輸入以下的程式碼來測試看看結果:  

<!DOCTYPE html>
<html ng-app>
<head>
	<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.2/angular.min.js"></script>
	<meta charset="utf-8">
	<title>JS Bin</title>
</head>
<body>
	<p>{{ '馬老師雲端研究室' }}</p>
	<p>35+62={{ 35+62 }}</p>
	<p>NT{{ 62000 | currency }}</p>
</body>
</html>

可以看到輸出的結果應該是:(在JS Bin上面看AngularJS輸出結果

馬老師雲端研究室

35+62=97

NT$62,000.00

同樣的如果我們要利用jQuery來完成這樣的頁面,程式碼就會變成:(在JS Bin上面看jQuery輸出結果

<!DOCTYPE html>
<html>
<head>
	<script src="https://code.jquery.com/jquery-1.11.1.min.js"></script>
	<script src="https://cdnjs.cloudflare.com/ajax/libs/numeral.js/1.4.5/numeral.min.js"></script>
	<meta charset="utf-8">
	<title>JS Bin</title>
</head>
<body>
	<p></p>
	<p></p>
	<p></p>
</body>
</html>
<script>
	$("p:eq(0)").text('馬老師雲端研究室')
	$("p:eq(1)").text('35+62=' + (35 + 62))
	$("p:eq(2)").text('NT' + (numeral(62000).format('$ 0,0.00')))
</script>

請注意,為了要完成第三項貨幣型式的呈現,我們還必須去引用這個網站的jQuery Plugin才有辦法比較輕鬆的實現。從上面的案例可以看的出來jQuery是由HTML DOM來抓到對象,再針對對象做操作,而AngularJS不管顯示的效果為何,就是在需要有程式運算的地方出現,所以AngularJS也被稱為符合MVC結構的Javascript函式庫(MVC是一種寫程式的結構,全名是Model View Controller,大家可以上網Google就可以查到很多與MVC相關的資料),但如果你有進入官網,可以看到官網上他的標題是「AngularJS – Superheroic JavaScript MVW Framework」,翻譯成中文大概是「AngularJS是一個符合MV…Whatever什麼什麼隨便啦!的超級函式庫」,可以看出Google的惡搞功夫。

再來示範第二個案例,本案例利用購物行為來製作相關的頁面讓大家參考,程式碼如下:

<!DOCTYPE html>
<html ng-app>
<head>
	<script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.3.2/angular.min.js"></script>
	<meta charset="utf-8">
	<title>JS Bin</title>
</head>
<body ng-init="stock=120;price=325;quantity=1;total=0">
	<p>馬老師雲端研究室 滑鼠墊</p>
	<p>剩餘:<span ng-model="stock">{{ stock-quantity }}</span>個</p>
	<p>單價:<span ng-model="price">{{ price | currency:"NT$":0 }}</span>元</p>
	<p>數量:<input type="number" min="0" max="{{ stock }}" ng-model="quantity"></p>
	<p>總金額:<span ng-model="total">{{ price*quantity | currency:"NT$":0 }}</span></p>
</body>
</html>

輸出結果:(在JS Bin上面看AngularJS輸出結果

AngularJS JS Bin 輸出結果
AngularJS JS Bin 輸出結果

在這個案例裡面有四個項目,分別是商品剩餘數量、單價、數量、總金額,使用者唯一可以改變的只有數量,但頁面中會自動運算剩餘數量和總金額,其中在語法body標籤中,加上了ng-init屬性,代表設定這幾個項目的預設值,stock(剩餘數量)120個、price(單價)325元、quantity(數量)1個,total(總金額)325元。接下來在span內的ng-model就是去綁定該定義項目,{{  }}則是顯示該項目或運算結果,另外貨幣格式的部分,也是用了一些設定讓貨幣在這個案例裡面顯示得更為接近台幣格式,另外還是用HTML5 input標籤的min和max來限制欄位內的值。 而這個案例如果轉換為jQuery的寫法,大概會是下面這樣子:(在JS Bin上面看jQuery輸出結果

<!DOCTYPE html>
<html>
<head>
	<script src="http://code.jquery.com/jquery-1.11.1.min.js"></script>
	<script src="http://cdnjs.cloudflare.com/ajax/libs/numeral.js/1.4.5/numeral.min.js"></script>
	<meta charset="utf-8">
	<title>JS Bin</title>
</head>
<body>
	<p>馬老師雲端研究室 滑鼠墊</p>
	<p>剩餘:<span id="stock"></span>個</p>
	<p>單價:<span id="price"></span>元</p>
	<p>數量:<input type="number" min="0" ng-model="quantity" id="quantity"></p>
	<p>總金額:<span id="total"></span>元</p>
</body>
</html>
<script>
	var stock = 120;
	var price = 325;
	var quantity = 1;
	var total = 325;
	$("#stock").text(stock) $("#price").text('NT' + (numeral(price).format('$ 0,0'))) $("#quantity").val(quantity).attr(
		"max", stock) $("#total").text('NT' + (numeral(total).format('$ 0,0'))) $("#quantity").change(function () {
		quantity = $(this).val() newstock = stock - $(this).val() total = price * $(this).val() $("#stock").text(
			newstock) $("#price").text('NT' + (numeral(price).format('$ 0,0'))) $("#total").text('NT' + (
			numeral(total).format('$ 0,0')))
	})
</script>

後記:以上兩個案例示範的是jQuery和AngularJS在撰寫頁面的不同,不過因為這篇文章原本就是要以AngularJS為主,所以挑的案例當然會是AngularJS比較佔優勢的內容,還是跟我常說的一樣,做不同的東西就要用不同的工具,用錯了工具不是做不到,但可能是會事倍功半的!另外文章中的程式碼,都是嵌入遠端的JS檔,所以也可以把整個程式碼複製到你熟悉的網頁開發軟體內,一樣會看到同樣的結果喔!

You may also like...

4,852 Responses

  1. nuestra web表示:

    This is my first time i visit here. I found so many helpful stuff in your website especially its discussion. From the tons of responses on your posts, I guess I am not the only one having all the enjoyment here! keep up the excellent work

  2. Wendelldub表示:

    Truly tons of valuable facts.
    national pharmacies drugs online canadian viagra generic pharmacy

  3. Hey! Someone in my Facebook group shared this site with us so I came to
    check it out. I’m definitely loving the information. I’m book-marking and will
    be tweeting this to my followers! Outstanding blog
    and great design.

  4. Marrispisn表示:

    online essay writers wanted
    help with writing essays at university
    college essay online help

  5. PABAKAWLBIXvm表示:

    buy lyrica for sale order pregabalin 150mg sale order pregabalin 150mg online cheap

  6. Alvinimave表示:

    Thank you! Excellent information.
    columbia college essay how to write an essay for scholarship reliable essay writing service

  7. credit repair表示:

    Saw your material, and hope you publish more soon.

  8. Alvinimave表示:

    Wow a good deal of wonderful info.
    how to write informative essay wikipedia essay writer cheap assignment writing service

  9. Alvinimave表示:

    You actually mentioned it adequately!
    essay competitions for college students https://essayssolution.com/ professional ghostwriter

  10. Wendelldub表示:

    You have made the point.
    discount pharmaceuticals mexican online pharmacies pharmacy near me

  11. Joetepisn表示:

    dates online for money
    ourtime dating site log in
    free adult dating

  12. Alvinimave表示:

    Great facts. With thanks.
    how to write the essay https://orangepornhub.com/ australia essay writing service

  13. Alvinimave表示:

    Perfectly voiced indeed! .
    college essay writers https://orangepornhub.com/ content writing services company

  14. Joetepisn表示:

    single women online
    dafing sites
    best online dating

  15. Alvinimave表示:

    Thanks a lot, I like it!
    tok essay help https://freshapps.space/ phd thesis writing help

  16. ZABAKAWLBIXkj表示:

    generic ivermectin cream stromectol generic name ivermectin 0.5 lotion india

  17. Wendelldub表示:

    Kudos. Good stuff.
    canada medication pharmacy generic viagra online prescription cost comparison

  18. Brucetoush表示:

    Good data. Thanks a lot!
    online pharmacy no prescription walgreens pharmacy legitimate online pharmacies

  19. I discovered your weblog site on google and verify just a few of your early posts. Proceed to maintain up the very good operate. I simply further up your RSS feed to my MSN News Reader.

  20. Slppvr表示:

    brand ezetimibe 10mg buy tetracycline 250mg pills buy baclofen 10mg pill

  21. Alvinimave表示:

    You made your point very effectively!.
    college entrance essay write my essays for me best essay writing services

  22. Alvinimave表示:

    You actually expressed that superbly!
    custom essay writing toronto argumentative essay writer professional writing services

  23. Alvinimave表示:

    Amazing info. Appreciate it.
    help writing a descriptive essay https://dissertationwritingtops.com/ pay to have essay written

  24. MichaelBlibe表示:

    where to buy doxycycline over the counter doxycycline online

  25. Wendelldub表示:

    Good knowledge. Many thanks!
    canadian drugs online pharmacy non prescription online pharmacy reviews mexican online pharmacies

  26. SMOK Nfix表示:

    What’s up, the whole thing is going perfectly here and ofcourse
    every one is sharing information, that’s really excellent,
    keep up writing.

  27. Your writing is perfect and complete. baccarat online However, I think it will be more wonderful if your post includes additional topics that I am thinking of. I have a lot of posts on my site similar to your topic. Would you like to visit once?

  28. Eachellepisn表示:

    online date
    facebook dating site
    dating gmail germany

  29. Alvinimave表示:

    Thank you. A good amount of stuff!
    lord of the flies essay help https://freshappshere.com/ writing company

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。