首頁 web前端 js教程 Angular 5新手必知

Angular 5新手必知

Apr 16, 2018 am 10:42 AM
angular 新手

這次帶給大家Angular 5新手必知,Angular 5新手使用的注意事項有哪些,下面就是實戰案例,一起來看一下。

儘管被稱為Angular5,實際上它只是這個誕生於2012年的前端框架的的第四個版本:

angular history

看起來差不多半年就發布一個新版本,不過實際上從重寫的版本2開始,開發介面與核心思想就穩定下來了,並且基本上保持著與前序版本的兼容性。

在5這個新的版本中,Angular團隊將改進重點放在以下特性方面:

  1. # 更容易建立漸進式Web應用程式- Progressive Web App

  2. 使用建置優化器剔除無用程式碼,以獲得更小的應用程式、更快的網頁載入時間

  3. 使物化設計元件相容於服務端渲染

PWA是Google提出的一個標準,旨在讓Web應用在行動終端上獲得媲美原生應用的使用者體驗。一個PWA應用程式主要利用Service Worker和瀏覽器快取來提省互動體驗,它不僅可以直接部署在手機桌面,而且可以離線應用:

# 二、引入angular環境

# Angular推薦使用TypeScript來開發應用,這要求使用一個線上編譯器(JIT)即時編譯程式碼,或在開發期間採用預編譯器(AOT)提前編譯程式碼。

為了避免這個繁瑣的過程影響對Angular框架本質的思考,我們將這些必需品進行了必要的配置和打包,以便適應線上編寫和實驗。現在只需要引入一個庫a5-loader就可以了。

你可能注意到Angular框架並不是藍色的。的確,我們沒有把它打包在a5-loader中,而是讓模組載入器(SystemJS)根據應用的需要自動載入。這麼做的目的,是為了讓應用程式碼,和後續課程中採用的後端建構方法保持一致。

如果你對這個函式庫有興趣,可以造訪github上的 http://github.com/hubwiz/a5-loader 倉庫。

三、創建Angular元件

# Angular是面向元件的前端開發框架。如果你曾經從事過C/S圖形化應用的開發,應該要知道元件這個字的意思。基本上,組件代表著一些具有圖形介面,並且具有內在邏輯能力的程式單元。下圖列出了三種用於實作乒乓切換的元件:

component sample

元件提供了很好的複用性,在一堆元件的基礎上,我們使用簡單的膠水程式碼就可以實現相當複雜的互動功能。

現在讓我們來建立Angular元件,程式碼相當簡單:

@Component({ selector: "ez-app", template: `<h1>Hello,angular5</h1>`})class EzComp{}
登入後複製

在Angular框架中,元件就是指一個應用了Component裝飾器的類別。 Component裝飾器的作用,就是為被裝飾的類別附加元資料資訊:

# annotations

Angular框架對應用程式進行編譯引導時,將使用這些元資料建構視圖。其中的兩個元資料非常重要

selector:元件宿主元素的CSS選擇符,宣告了元件在DOM樹中的渲染錨點

template:元件的模板,框架將以這個模板為藍圖建構視圖

四、創建Angular模組

# Angular框架的核心是組件化,同時它的設計目標是適應大型應用的開發。因此,在應用開發中引入了模組(NgModule)的概念來組織不同的元件(及服務),一個Angular應用至少需要創建一個模組。

為了區別於JavaScript語言本身的模組概念,在本課程中將使用NG模組來表示一個Angular模組。

類似組件,NG模組就是一個應用了NgModule裝飾器的類別。例如,下面的程式碼建立了一個NG模組EzModule:

@NgModule({
 imports: [ BrowserModule ],
 declarations: [ EzComp ],
 bootstrap: [ EzComp ]
})
class EzModule{}
登入後複製

同樣,NgModule裝飾器用來給被裝飾的類別附加模組元數據,可以查看被裝飾類別的annotations屬性來觀察這一結果:

ngmodule annotations

NgModule装饰器声明了一些关键的元数据,来通知框架需要载入哪些NG模块、编译哪些组件以及启动引导哪些组件:

imports: 需要引入的外部NG模块

declarations:本模块创建的组件,加入到这个元数据中的组件才会被编译

bootstrap:声明启动引导哪个组件,必须是编译过的组件

需要强调的是,bootstrap元数据声明的组件必须是编译过的组件:它要么属于使用imports元数据引入的外部NG模块,要么是已经在declarations元数据中声明的本地组件。

NG模块BrowserModule定义于包@angular/platform-browser,它是Angular跨平台战略的重要组成部分。BrowserModule封装了浏览器平台下的核心功能实现,与之对应的其他平台实现还有:

  1. ServerModule:服务端实现

  2. WorkerAppModule:WebWorker实现

通常情况下开发Web应用时,我们都需要引入BrowserModule这一NG模块。

五、启动Angular应用

前面课程中,我们已经创建了一个组件和一个NG模块,不过似乎只是定义了一堆的元数据,几乎没有写太多有价值的代码。
但这就是Angular框架的一个特点:声明式开发。这些元数据是用来向框架声明如何引导启动应用程序的重要信息。

启动代码很简单,引入platformBrowserDynamic()工厂函数、创建平台实例、启动指定模块:

import { platformBrowserDynamic } from "@angular/platform-browser-dynamic"
const pref = platformBrowserDynamic()
pref.bootstrapModule(EzModule)
登入後複製

√ 平台对象:PlatformRef

platformBrowserDynamic()函数返回一个PlatformRef对象(Angular对平台的抽象),这个函数最重要的作用,在于其内部创建了一个即时(Just In Time)编译器,可以在线实时编译NG模块和组件,这也是它被称为动态(Dynamic)的原因:dynamic bootstrap

平台对象的bootstrapModule()方法用来启动指定的NG模块,启动的绝大部分工作,在于利用JIT编译器编译NG模块和组件,当这些编译工作都完成后,则根据启动模块的bootstrap元信息,渲染指定的组件。

六、为什么这么复杂?

可能你已经感觉有点复杂了:只是为了写一个Hello,World,就要写这么多代码。

事实上这些复杂性是随着Angular的发展逐步引入的,从好的一方面说,是提供给开发者的可选项逐渐增多了,适用场景变多了。

比如,在Angular2正式版之前,都没有NG模块的概念,你只要写一个组件就可以直接启动应用了。Angular团队的预期应用场景是大规模前端应用开发,因此显式的NG模块声明要求也是容易理解的。不过即使是小型的应用,由于可以只使用一个NG模块,因此这一点的复杂性增加倒也不多,只是增加了学习和运用这个新概念的成本。

另一个显而易见的复杂性,在于多平台战略的引入。Angular希望让应用可以跨越浏览器、服务器等多个平台(基本)直接运行。因此免不了抽象一个中间层出来,我们需要在应用中显式地选择相应的平台实现模块:multiple platform

第三个复杂性来源于对预编译(AOT:Ahead Of Time)的支持。在早期,Angular只有即时编译(JIT:Just In Time),也就是说应用代码是在运行时编译的。即时编译的第一个问题是在应用中需要打包编译器代码,这增加了最终发布的应用代码的
大小;另一个问题在于编译需要时间,这增加了用户打开应用的等待时间。因此现在的Angular是同时支持JIT和AOT的,但启动JIT编译的应用,和启动AOT编译的应用,在目前需要显式地进行选择:aot vs. jit

对于Angular而言,编译将入口NG模块定义转换为NG模块工厂(NgModuleFactory)。对于JIT而言,这一步是隐含在bootstrapModule()中的。而对于AOT而言,生成模块工厂就结束了,应用启动时使用bootstrapModuleFactory()调用生成的模块工厂即可。

尽管AOT编译通常在构建阶段运用,我们可以在浏览器里模拟这个分两步的过程。

七、理解Angular的初衷

除了框架本身的功能強大所導致的複雜性,Angular的另一個複雜性來源在於其高度封裝的聲明式API,讓開發者難以揣摩、洞察框架的實現機制,因此使用起來就很心虛,一旦出現問題則難以分析排錯:angular error

# 不能把Angular當作黑盒來使用。

# 一方面原因在於,Angular是以其聲明式的模板語法為核心提供API開發介面的,開發者書寫的模板,經過框架相當複雜的編譯處理,才渲染出最終的視圖物件。如果不嘗試了解從模板到視圖物件這個過程究竟發生了什麼,我相信你總是會有一種失控的感覺。

另一方面原因在於,Angular是一個框架,它搭好了應用程式的架子,留了一些空隙讓開發者填充。如果不盡可能地了解框架的運作機制,很難充分地利用好框架。

開發Angular的出發點,是為了實作用HTML來寫使用者介面,想想一個靜態網頁有多容易開發,你就知道這是多麼好的想法:html challenge

# 原生HTML的問題在於,首先它需要藉助JavaScript才能實現過得去的用戶交互,其次它只有那麼多標籤可用,難以擔當開髮用戶界面的大任。

既然瀏覽器不能直接解釋這樣的標籤,Angular團隊就引入了編譯器的概念:
在送給瀏覽器之前,先把有擴展標籤的HTML翻譯成瀏覽器支援的原生HTML:html compiler

相信看了本文案例你已經掌握了方法,更多精彩請關注php中文網其它相關文章!

推薦閱讀:



#

以上是Angular 5新手必知的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

玩霧鎖王國的秘籍給新手指引 玩霧鎖王國的秘籍給新手指引 Jan 28, 2024 pm 03:33 PM

霧鎖王國是一款開放世界的遊戲,玩家可以扮演火焰之子進行生存和探索。遊戲融合了動作RPG挑戰的特色娛樂,為玩家帶來無盡的驚喜和歡樂。在遊戲中,玩家可以探索資源、環境和武器等內容。對於一些新手玩家,可能會對如何上手遊戲感到好奇。在這期的介紹和分享中,我們將為大家提供一些相關的入門指南。霧鎖王國新手入門技巧被瘴氣籠罩區域的危險等級不同在探索的過程中會逐漸解鎖地圖的新區域,並且能看到被瘴氣籠罩區域的位置。地圖上會以兩種顏色來區分,藍色區域是可以短暫進入的,根據角色能力等級高低,可停留的時間也會有所區別

錨點降臨新手十連角色推薦 錨點降臨新手十連角色推薦 Feb 20, 2024 pm 02:30 PM

錨點降臨是一款擁有高畫質美少女二次元主題的3D回合卡牌遊戲,提供了豐富角色的精彩組合可供玩家來探索和體驗,擁有許多精品陣容的強力搭配,新人玩家也是好奇新手池有哪些強力角色推薦,以下來看看新手十連金的選擇參考!錨點降臨新手池強力角色推薦第一個十連選艾莉絲,她主要是一個單體雷系爆發角色,單體輸出非常爆炸的,對新人的體驗也會是非常的友善的,所以十分推薦選取。 10抽必金建議選擇「艾莉絲」+「羚角」的組合,艾莉絲是最值得選的金皮雷屬性輸出角色,比新手卡池中的另外2個角色要強得不是一星半點。艾莉絲可以透過特

如何在Ubuntu 24.04上安裝Angular 如何在Ubuntu 24.04上安裝Angular Mar 23, 2024 pm 12:20 PM

Angular.js是一種可自由存取的JavaScript平台,用於建立動態應用程式。它允許您透過擴展HTML的語法作為模板語言,以快速、清晰地表示應用程式的各個方面。 Angular.js提供了一系列工具,可協助您編寫、更新和測試程式碼。此外,它還提供了許多功能,如路由和表單管理。本指南將討論在Ubuntu24上安裝Angular的方法。首先,您需要安裝Node.js。 Node.js是一個基於ChromeV8引擎的JavaScript運行環境,可讓您在伺服器端執行JavaScript程式碼。要在Ub

一文探究Angular中的服務端渲染(SSR) 一文探究Angular中的服務端渲染(SSR) Dec 27, 2022 pm 07:24 PM

你知道 Angular Universal 嗎?可以幫助網站提供更好的 SEO 支援哦!

angular學習之詳解狀態管理器NgRx angular學習之詳解狀態管理器NgRx May 25, 2022 am 11:01 AM

這篇文章帶大家深入了解angular的狀態管理器NgRx,介紹一下NgRx的使用方法,希望對大家有幫助!

如何使用PHP和Angular進行前端開發 如何使用PHP和Angular進行前端開發 May 11, 2023 pm 04:04 PM

隨著網路的快速發展,前端開發技術也不斷改進與迭代。 PHP和Angular是兩種廣泛應用於前端開發的技術。 PHP是一種伺服器端腳本語言,可以處理表單、產生動態頁面和管理存取權限等任務。而Angular是一種JavaScript的框架,可以用來開發單一頁面應用程式和建構元件化的網頁應用程式。本篇文章將介紹如何使用PHP和Angular進行前端開發,以及如何將它們

淺析angular中怎麼使用monaco-editor 淺析angular中怎麼使用monaco-editor Oct 17, 2022 pm 08:04 PM

angular中怎麼使用monaco-editor?以下這篇文章記錄下最近的一次業務中用到的 m​​onaco-editor 在 angular 中的使用,希望對大家有幫助!

學會利用批次縮排是PyCharm新手必須掌握的技能 學會利用批次縮排是PyCharm新手必須掌握的技能 Dec 30, 2023 pm 12:58 PM

PyCharm新手必備技能:掌握批次縮排的使用方法,需要具體程式碼範例概述:PyCharm是一款功能強大的Python整合開發環境(IDE),它提供了許多實用的工具和功能,幫助開發者提高效率。在日常的編碼過程中,我們經常需要將程式碼進行縮進,保持程式碼的格式整齊美觀。而PyCharm提供的批次縮排功能可以幫助我們快速地將程式碼進行批次縮排,提高編碼效率。本文將探討Py

See all articles