跳到主要內容

[教學] 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 並做太多抽離,只是另外一種呈現的方式而已,或許這樣說對於初學者很抽象,但是它就是如此。

留言

這個網誌中的熱門文章

npm 還可以看影片,沒想到真的有人這麼做

 還真的有人做這件事情, 庆余年2剛上線,有一位小哥竟然利用 npm 包的機制,將整套高清視頻都搬上來了。 https://x.com/fengmk2/status/1791498406923215020 圖片來源, https://x.com/fengmk2/status/1791498406923215020/photo/1 此 Package 出處 https://www.npmjs.com/package/lyq2?activeTab=versions 截圖留念, 機制說明 NPM(Node Package Manager)是一個流行的 JavaScript 軟件包管理器,用於管理和分發 Node.js 應用的依賴。它允許開發者將自己的代碼打包成「包」,並上傳到 NPM 的公共註冊表,供其他開發者下載和使用。這個過程通常包括以下步驟: 創建 NPM 包 :開發者將自己的代碼和相關文件打包成一個 NPM 包。 上傳到註冊表 :將包上傳到 NPM 的公共註冊表。 下載和使用 :其他開發者可以通過 NPM 命令行工具下載並安裝這些包。 這位小哥利用這一機制,可能是通過將整套高清視頻文件打包成 NPM 包並上傳到公共註冊表。其他人只需通過簡單的 NPM 命令即可下載這些視頻文件。 影響 版權問題 :這種行為涉及明顯的版權侵犯。高清視頻通常受到版權保護,未經授權的分發和下載都是非法的。 NPM 註冊表的可靠性 :這類內容的出現可能會損害 NPM 註冊表的可靠性和聲譽。NPM 註冊表是開發者分享和使用代碼的重要平台,如果充斥著這些不合法的內容,會影響其公信力。 潛在的安全風險 :將視頻文件偽裝成 NPM 包可能會帶來潛在的安全風險。下載這些包的用戶可能會無意中下載到惡意軟件或其他有害內容。 技術濫用 :這一行為展示了技術的濫用,原本為了方便開發者分享和使用代碼的機制,被用來分發非法內容,會對整個開發者社區造成負面影響。 歡迎留言給我,讓我們得到更多討論,一起回饋更多可能。 如果對於技術架構或者技術開發有相關需要顧問教育訓練服務或專案開發,聯絡方式如下,或者是與皇漢科技 EXMA-Square 進行聯繫。 FB: https://www.facebook.com/clonncd/ Twitter: https://twitter.com/clonncd 熱血漢誌: htt

面試者如何挑戰大工程師時代來臨?

面試者如何挑戰大工程師時代來臨? 全世界都在倡導轉職成為工程師,似乎轉職成為工程師就成為職場的救贖,真的是如此嗎?讓老衲來杠給各位聽。 最近有位好久不見的小朋友,是 2000 年出生的小蔡,對於即將面臨到面對職場的挑戰開始關心起技術,他開始尋找比較適合自己的領域,同時也開始在思考到底為了接下來的就職小蔡該如何準備。 詢問我說是不是可以考慮軟體開發工程師這條路線 對於他的詢問,反而引起我的注意, 這讓我開始思考並映射於最近招募的經驗,軟體開發此領域是不是對於每個人都是可以擔任的職啀,這邊分享一些自己的看法希望對各位有所幫助。 全民工程師這件事情 在全球景氣低迷的狀況下,的確特別在這一年大家會很有感覺萬物齊漲,薪水不漲,薪資就是一直停滯不前。 很多時候,在不同的領域中,會發現整個薪資就算是擔任了管理職務主管你也會面臨到薪資的強大屏障在自己面前。 這個時候, 軟體工程師年薪百萬口號 似乎就成了一種救贖。 好像成為了工程師就可以達到年薪百萬,在家輕鬆工作,不用打卡也不用受到風吹雨淋,隨時想工作就可以工作,每個月又有固定薪水入帳,感受到類財富自由,人生的美好。 如果能夠爭取到跨國公司的職位,這份薪水有可能還可以上看每個月十多萬以上,甚至是往上也是極度有可能的事情,人生美好層次又再度提高了起來。 但這件事情是真的每個人都可以達到嗎? 還是這就是另外一種性存者偏差呢? 亦或者這些人其實是金字塔頂端的小眾? 每份履歷都像是同一種履歷 最近在最近幾年在面試工程師的時候特別會看到許多轉職者,一開始履歷裡面看到相關的作品一開始會覺得十分的驚艷, Wow, 現在的新手就可以做到如此精美的畫面,這些畫面是我當初用 Bootstrap 也做不出來的東西,許多的互動體驗好的一個不行,做出來的頁面配色和對齊也是極致。 但是隨著時間推移,多看了幾封履歷之後,就會發現在各大技術養成學院出來的學生履歷成果內容如出一轍,在面試的過程中也會詢問許多關於框架的底層概念,和比較技術觀念的時候,甚至是許多框架的核心概念,就很容易露出馬腳。 很多面試者會 一問三不知 ,透過許多引導,但殘酷的是連關鍵字是什麼都也無法推敲出來,更不用說在小組裡面到底怎麼樣合作,許多不同線上產品的比較,使用者流程,使用者後面的互動邏輯等,幾乎是風吹一片倒,只能

初級工程師的迷霧:解析開發中常見的困擾與挑戰

在我和工程團隊的共事歷程中,我注意到初級工程師經常遇到的問題。這些問題,無論在面對簡單或複雜的挑戰時,都能體現出來。歸納起來會有常見以下幾個面向。 簡單的問題 發現許多初級工程師在面臨簡單或複雜的問題時,常有可能會遇到困難,時常會有一種繞圈圈的氛圍, 常見問題分別有, 問題本質 首先是對於問題本質上並沒有釐清完成的目標,以及問題本身是要解決什麼樣的商業問題,客戶問題,導致於因為總總原因,做了 scope 過大,或者,花了過多時間進行 over design 的問題發生。 過度依賴套件 發現在新手開發中,會發現為了解決單一問題,卻引用了一大包的 libary 或者引用了不適合此問題的套件。在求解的過程中,容易導致要解決套件的問題,而忘記了要解決的問題是什麼。 複雜的問題 我們在面對複雜的問題時,經常會因為缺乏策略與經驗而感到困惑,反而在處理看似簡單的問題時,卻可能因為過度依賴套件或缺乏組合技巧,而陷入泥淖。不論是複雜或是簡單的問題,我們都需要找到更有效的解決方式。 不論是經常過度依賴套件求解,又或者複雜的問題不知道如何拆解。因此導致新手可能會感到無所適從,不知道如何運用組合技巧。因此,他們往往在處理看似簡單的問題時,容易陷入困境,導致專案的時程延宕。 特別是各自工程師都有開發壓力時,身為新手開發者就更難與資深開發者進行討論,從中汲取前輩的經驗,轉化成自身的價值發生。 解決的方向 上述的問題,自己再開發的時候也或多或少會發生,當然在新入門者更是容易深陷其中,不知如何自拔。 除了參與社群,從傾聽到互動的過程中,從前輩的經驗進行思考及內化的過程。 在 AI Generated 時代,我們可以透過 LLM 透過適當的思考方式和問答過程,逐步的逼近答案,也許是一條可以進行的道路。 這裡,會以透過內部訓練的經驗,提出如何以 ChatGPT 這樣的工具為例,提升對於新手工程師的幫助。 透過 ChatGPT,我們可以解決許多類似的問題。例如,我們可以透過 ChatGPT 建立一個問答系統,進行問題分析,或是請 ChatGPT 提出最適合的工具和方法來解決問題,尤其是那些可以透過使用基礎 function 就能處理的簡單問題。這不僅能讓我們避免過度依賴套件,更能發掘並利用基礎工具的能力。 工商時間 7/3 (週