跳到主要內容

[教學] 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' + '!'}}
網址
http://docs.angularjs.org/tutorial/step_00

ng-repeat step-2

加入 ng-model 了解, angular model 模型,如何使用 ng-model 與 html 進行互動
added
app/js/controller.js

<pre>
function PhoneListCtrl($scope) {
  $scope.phones = [
    {"name": "Nexus S",
     "snippet": "Fast just got faster with Nexus S."},
    {"name": "Motorola XOOM™ with Wi-Fi",
     "snippet": "The Next, Next Generation tablet."},
    {"name": "MOTOROLA XOOM™",
     "snippet": "The Next, Next Generation tablet."}
  ];
}
</pre>
網址
http://docs.angularjs.org/tutorial/step_02

$filter variable step-3, step-4

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

ng-model tag attribute

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


   Search: 
    
NamePhone
{{friend.name}} {{friend.phone}}

search

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

    Any:  

    Name only 

    Phone only 

    
NamePhone
{{friend.name}} {{friend.phone}}
網址

http://docs.angularjs.org/tutorial/step_03
http://docs.angularjs.org/tutorial/step_04
http://docs.angularjs.org/api/ng.filter:filter
http://docs.angularjs.org/api/ng.filter:orderBy

XHR & DI step-5

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

$http

Shortcut $http(method)

    $http.get('/someUrl').success(successCallback);
    $http.post('/someUrl', data).success(successCallback);
網址
http://docs.angularjs.org/tutorial/step_05
http://docs.angularjs.org/api/ng.$http

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">
    <a href="#/phones/{{phone.id}}" class="thumb">
    <img ng-src="{{phone.imageUrl}}"></a>
    <a href="#/phones/{{phone.id}}">{{phone.name}}</a>
    <p>{{phone.snippet}}</p>
</li>
網址
http://docs.angularjs.org/tutorial/step_06

Route and partial template - step 7

Route 這邊開始進行前端 route 的設定,angular 已經同時在設定 route 之後,可以進行 PJAX (pushstate + AJAX) ,同時進行 template render ,基本操作在 route 的設定之下就可以完成。
angular.module('phonecat', []).
map to
<html lang="en" ng-app="phonecat">
Route setting
config(['$routeProvider', function($routeProvider) {

  $routeProvider.when('/phones', {templateUrl: 'partials/phone-list.html',   controller: PhoneListCtrl}).
  when('/phones/:phoneId', {templateUrl: 'partials/phone-detail.html', controller: PhoneDetailCtrl}).
  otherwise({redirectTo: '/phones'});
}]);
partial HTML data will be inject
<div ng-view></div>
網址
http://docs.angularjs.org/tutorial/step_07

more Templating - step 8

延續前一章節的流程,進行不同 view 更換的流程,同時可以根據 controller 進行 html render。
function PhoneDetailCtrl($scope, $routeParams, $http) {
    $http.get('phones/' + $routeParams.phoneId + '.json').success(function(data) {
        $scope.phone = data;
    });
}

Filter - step9

主要目的介紹 module 寫法,目標是自訂一個 filter ,前面是 angular 預設的 filter ,這邊介紹 angular module 寫法,進行 filter 的訂定。
Custom Filter
angular.module('phonecatFilters', []).filter('checkmark', function() {
    return function(input) {
        return input ? '\u2713' : '\u2718';
    };
});
app.js
angular.module('phonecat', ['phonecatFilters']).
html filter
<dl>
  <dt>Infrared</dt>
  <dd>{{phone.connectivity.infrared | checkmark}}</dd>
  <dt>GPS</dt>
  <dd>{{phone.connectivity.gps | checkmark}}</dd>
</dl>

$scope and Event handlers - step10

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

$scope.setImage = function(imageUrl) {
    $scope.mainImageUrl = imageUrl;
}
it will change mainImageUrl
<img ng-src="{{mainImageUrl}}" class="phone">

<img ng-src="{{img}}" ng-click="setImage(img)">

$service - step11

$resource ,用來訂定 RESTful service ,當每次程式都需要執行 $http 就會覺得重複的步驟太過冗長,因此可以採用 $resource 進行 RESTful service 訂定發送 AJAX。
need lib/angular/angular-resource.js
angular.module('phonecatServices', ['ngResource']).
factory('Phone', function($resource){
  return $resource('phones/:phoneId.json', {}, {
    query: {method:'GET', params:{phoneId:'phones'}, isArray:true}
  });
});
app/js/controllers.js. auto query method
function PhoneListCtrl($scope, Phone) {
  $scope.phones = Phone.query();
  $scope.orderProp = 'age';
}
build a Phone data object to instead of $http method.
$scope.phone = Phone.get({phoneId: $routeParams.phoneId}, function(phone) {
    $scope.mainImageUrl = phone.images[0];
});

後記

此篇文章給予初入門的朋友,也是給自己在整個流程後的隨手筆記及大綱提要,等到哪天需要回過頭來繼續開發 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 並做太多抽離,只是另外一種呈現的方式而已,或許這樣說對於初學者很抽象,但是它就是如此。

留言

這個網誌中的熱門文章

Vibe Coding:到底?氛圍驅動程式開發必殺技?

Vibe Coding(氛圍編程) 是由 OpenAI 共同創辦人 Andrej Karpathy 在 2025 年提出的革命性程式開發方式,它讓開發者透過自然語言與 AI 對話來生成程式碼,徹底改變了傳統的編程模式。 這種開發方式的核心理念是 「順著感覺走」 ,讓 AI 處理技術細節,開發者專注於創意和需求描述。 Vibe Coding 需要基本上的規劃和執行,但並沒有強制規範,從日常經驗來說可分為三個階段, 前期準備、開發過程、和後期維護 三個關鍵階段。每個階段都有其特定的任務和注意事項,正確執行這些步驟將大幅提升開發效率和程式品質。 將靈感與需求透過 AI 快速轉化成產品功能或原型。以下幫你分成 「前、中、後」 三階段要做的事情,適合你自己做、或帶團隊做 前期:設定 vibe & 準備素材 這個階段的重點是 「建立開發語境」 ,因為 AI 的生成表現高度依賴前期提供的上下文與資料。 明確目標 :釐清要解決的問題、預期要做的功能與核心價值。例如在筆記軟體的情境中,可能是:「我要做一款讓使用者能用 Markdown 記錄筆記,並提供標籤與全文搜尋功能的簡單 App。」 收集靈感 :觀察同類產品(如 Obsidian、Notion)、蒐集市場痛點(例如太多筆記軟體無法脫機使用,或同步效能差)。 建立語境 :準備初步 prompt、背景知識、產品定位、品牌調性、目標使用者輪廓等。 確認資源 :決定用哪些工具(Gemini、ChatGPT、設計軟體、流程管理工具等)。 確認完上述內容之後,就可以先開始進行準備規格,進行第一次的 Vibe Coding 方向驗證 提示詞模板準備 很多人會跳過這步驟,但一份 「好的 AI 提示詞模板」 將決定接下來每一次 AI 對話的品質。有效的提示詞模板需具備: 描述具體且無歧義 包含技術要求和約束條件 提供範例資料和測試案例 指定程式碼風格和慣例 例如針對筆記軟體的案例:   「建立一個支援 AI 功能純文字筆記,輸入內容可即時渲染;需支援儲存到本地檔案,提供標籤欄位做分類;以 React 架構,程式風格採用 Tailwind style components 並使用 hooks。」 開發工具選擇 開發工具的選擇 同樣重要,目前市場上主要的 ...

Claude Code Hooks:自動化與安全的最佳實踐

寫在最前頭,這份文章主要寫起來是給自己看, 同時內容是比較適合開發者,工程師們可以做些自動化處理的簡單筆記。 Claude Code hooks Claude Code hooks 是一種強大的自動化機制,允許用戶在 Claude Code 的不同生命週期階段,自定義執行 shell 指令。這種設計讓開發者能夠將規則和自動化行為嵌入到應用層級,確保每次都能可靠執行,而不必依賴 LLM(大型語言模型)是否會選擇執行某項操作。 Hooks 的核心用途 通知 :自訂收到 Claude Code 等待用戶輸入或執行權限時的提醒方式。 自動格式化 :如在每次檔案編輯後自動執行 prettier (針對 .ts 檔)、 gofmt (針對 .go 檔)等。 日誌記錄 :追蹤所有執行過的命令,便於合規或除錯。 自動反饋 :當 Claude Code 產生不符合團隊規範的程式碼時,自動給出反饋。 自訂權限 :阻擋對生產環境檔案或敏感目錄的修改[^1]。 配置與結構 Hooks 透過設定檔進行配置,分為全域( ~/.claude/settings.json )、專案( .claude/settings.json )、本地專案( .claude/settings.local.json )以及企業級策略設定。每個 hook 由「事件名稱」和「匹配器」組成: "hooks": { "PreToolUse": [ { "matcher": "Bash", "hooks": [ { "type": "command", "command": "jq -r '...'" } ] } ] } matcher :用於匹配工具名稱(支援正則表達式),如 Write 、 Edit|Write 、 Notebook.* 。 hooks :當匹配時要執行的命令陣列。 type :目前僅支援 "command" 。 ...

[CSS] z-index 在不同瀏覽器繼承問題

今天會討論到這個課題,是因為要實做一個Popup dialog,所以我們希望的結果如下圖。 可是在IE7 卻發生了這樣的情況。 Popup不論怎麼設定z-index都無法浮在最上層,我們看一下html架構發生什麼事情。