[教學] angular 官方教學資料導覽

angular 關於官方教學自己做的一個簡短筆記,在官方基本教學流程中,已經給予大家大致的輪廓,到底 angular 怎麼去執行程式流程,進行 html render 以及如何將 html 變成 object,甚至到後面的 route, HttpRequest 取得資料方式

以下把 angular 官方網站提供的基本教學,做一個大致流程導覽,給自己一個簡單的紀錄。

angular 基本教學

http://docs.angularjs.org/tutorial

step-0

這邊進行 angular 第一次接觸,教導如何 install angualr 以及,angular html template 如何進行運作。

Nothing here {{'yet' + '!'}}<br></br>

網址

<a href="http://docs.angularjs.org/tutorial/step_00">http://docs.angularjs.org/tutorial/step_00</a><br></br>

ng-repeat step-2

加入 ng-model 了解, angular model 模型,如何使用 ng-model 與 html 進行互動

`added

app/js/controller.js



<a href="http://docs.angularjs.org/tutorial/step_00">http://docs.angularjs.org/tutorial/step_00</a><br></br>

`

網址

<a href="http://docs.angularjs.org/tutorial/step_02">http://docs.angularjs.org/tutorial/step_02</a><br></br>

$filter variable step-3, step-4

filter 的使用以及設定方式,使用 html attribute 使用 ng-filter 進行設定,以及和其他 ng-model 進行互動

ng-model tag attribute

從 filter 裡面設定的 searchText 可以對應到 ng-model 層級的資料進行過濾

<br></br><br></br> Search: <br></br><table><br></br><tbody><br></br><tr><th>Name</th><th>Phone</th></tr><br></br><tr ng-repeat="friend in friends | filter:searchText"><br></br><td>{{friend.name}}</td><br></br><td>{{friend.phone}}</td><br></br></tr><br></br></tbody></table><br></br>

search

search 是另外一個使用的方式,可以透過 search 進行資料立即過濾以及比對,可以使用 search.attr 進行比對 ng-model 內部的屬性進行比對過濾。

<br></br> Any: <br></br><br></br> Name only <br></br><br></br> Phone only <br></br><br></br><table><br></br><tbody><br></br><tr><th>Name</th><th>Phone</th></tr><br></br><tr ng-repeat="friend in friends | filter:search"><br></br><td>{{friend.name}}</td><br></br><td>{{friend.phone}}</td><br></br></tr><br></br></tbody></table><br></br>

網址

<a href="http://docs.angularjs.org/tutorial/step_03">http://docs.angularjs.org/tutorial/step_03</a><br></br><a href="http://docs.angularjs.org/tutorial/step_04">http://docs.angularjs.org/tutorial/step_04</a><br></br><a href="http://docs.angularjs.org/api/ng.filter:filter">http://docs.angularjs.org/api/ng.filter:filter</a><br></br><a href="http://docs.angularjs.org/api/ng.filter:orderBy">http://docs.angularjs.org/api/ng.filter:orderBy</a><br></br>

XHR & DI step-5

接下來開始進行 httpRequest 的部份,也就是大家比較熟悉的 AJAX 在 angular 裡面使用的物件稱為 $http ,這個章節會講解 $http 的使用方法

$http

Shortcut $http(method)<br></br><br></br> $http.get('/someUrl').success(successCallback);<br></br> $http.post('/someUrl', data).success(successCallback);<br></br>

網址

<a href="http://docs.angularjs.org/tutorial/step_05">http://docs.angularjs.org/tutorial/step_05</a><br></br><a href="http://docs.angularjs.org/api/ng.$http">http://docs.angularjs.org/api/ng.$http</a><br></br>

templating step-6

template 這邊開始會教導如何使用 ,如何透過 template 進行資料,屬性編輯,以及 DOM 的使用。
link, href=”#/phones/{{phone.id}}”
for image, ng-src=”{{phone.imageUrl}}”

<li ng-repeat="phone in phones | filter:query | orderBy:orderProp" class="thumbnail"><br></br> <a href="#/phones/{{phone.id}}" class="thumb"><br></br> <img ng-src="{{phone.imageUrl}}"></a><br></br> <a href="#/phones/{{phone.id}}">{{phone.name}}</a><br></br> <p>{{phone.snippet}}</p><br></br></li><br></br>

網址

<a href="http://docs.angularjs.org/tutorial/step_06">http://docs.angularjs.org/tutorial/step_06</a><br></br>

Route and partial template – step 7

Route 這邊開始進行前端 route 的設定,angular 已經同時在設定 route 之後,可以進行 PJAX (pushstate + AJAX) ,同時進行 template render ,基本操作在 route 的設定之下就可以完成。

angular.module('phonecat', []).<br></br>

map to

<html lang="en" ng-app="phonecat"><br></br>

Route setting

config(['$routeProvider', function($routeProvider) {<br></br><br></br> $routeProvider.when('/phones', {templateUrl: 'partials/phone-list.html', controller: PhoneListCtrl}).<br></br> when('/phones/:phoneId', {templateUrl: 'partials/phone-detail.html', controller: PhoneDetailCtrl}).<br></br> otherwise({redirectTo: '/phones'});<br></br>}]);<br></br>

partial HTML data will be inject

<div ng-view></div><br></br>

網址

<a href="http://docs.angularjs.org/tutorial/step_07">http://docs.angularjs.org/tutorial/step_07</a><br></br>

more Templating – step 8

延續前一章節的流程,進行不同 view 更換的流程,同時可以根據 controller 進行 html render。

function PhoneDetailCtrl($scope, $routeParams, $http) {<br></br> $http.get('phones/' + $routeParams.phoneId + '.json').success(function(data) {<br></br> $scope.phone = data;<br></br> });<br></br>}<br></br>

Filter – step9

主要目的介紹 module 寫法,目標是自訂一個 filter ,前面是 angular 預設的 filter ,這邊介紹 angular module 寫法,進行 filter 的訂定。
Custom Filter

angular.module('phonecatFilters', []).filter('checkmark', function() {<br></br> return function(input) {<br></br> return input ? 'u2713' : 'u2718';<br></br> };<br></br>});<br></br>

app.js

angular.module('phonecat', ['phonecatFilters']).<br></br>

html filter

<dl><br></br> <dt>Infrared</dt><br></br> <dd>{{phone.connectivity.infrared | checkmark}}</dd><br></br> <dt>GPS</dt><br></br> <dd>{{phone.connectivity.gps | checkmark}}</dd><br></br></dl><br></br>

$scope and Event handlers – step10

透過 $scope 可以在 html 中取得 function,又或者是 html 屬性也可以在 $scope 裡面取得對應資料。
in function, append a function to $scope

$scope.mainImageUrl = data.images<br></br><br></br>$scope.setImage = function(imageUrl) {<br></br> $scope.mainImageUrl = imageUrl;<br></br>}<br></br>

it will change mainImageUrl

<img ng-src="{{mainImageUrl}}" class="phone"><br></br><br></br><img ng-src="{{img}}" ng-click="setImage(img)"><br></br>

$service – step11

$resource ,用來訂定 RESTful service ,當每次程式都需要執行 $http 就會覺得重複的步驟太過冗長,因此可以採用 $resource 進行 RESTful service 訂定發送 AJAX。
need lib/angular/angular-resource.js

angular.module('phonecatServices', ['ngResource']).<br></br>factory('Phone', function($resource){<br></br> return $resource('phones/:phoneId.json', {}, {<br></br> query: {method:'GET', params:{phoneId:'phones'}, isArray:true}<br></br> });<br></br>});<br></br>

app/js/controllers.js. auto query method

function PhoneListCtrl($scope, Phone) {<br></br> $scope.phones = Phone.query();<br></br> $scope.orderProp = 'age';<br></br>}<br></br>

build a Phone data object to instead of $http method.

$scope.phone = Phone.get({phoneId: $routeParams.phoneId}, function(phone) {<br></br> $scope.mainImageUrl = phone.images[0];<br></br>});<br></br>

後記

此篇文章給予初入門的朋友,也是給自己在整個流程後的隨手筆記及大綱提要,等到哪天需要回過頭來繼續開發 angular 的時候能夠有一個比較簡單參考資料。

以上資料如果有任何謬誤之處,還請各位多多協助修改指正。

這邊提一下自己對於 angular 的感想,angular 一開始入門看似容易,可是開始實作之後有許多必須要了解的基礎,才有辦法融會貫通,不然很容易造成遇到問題不得其解的狀況。特別是對於只有寫過 jQuery 的新手來說,會更為難以思考為什麼會有這種情況,為何 DI 還有變數可以自動帶入的魔法。

另外一提 angular 在 html & js 的情況下定位的更為複雜,讓初轉型 Front end 的人有個謬誤,到底是要將 method 寫在 html attribute 裡面比較好?還是 html & js 分離的架構比較容易懂?

在這邊 angular 定位於 web application,個人對於 angular 定下的 ng-app 以下都可以稱為是 web application skeleton ,可以視為是 angular 物件,與 js 並做太多抽離,只是另外一種呈現的方式而已,或許這樣說對於初學者很抽象,但是它就是如此。

CaesarChi

Web developer, focus on website fullstack, special JavaScript, and love sharing developing experience and communicate with developers. http://about.me/clonn