一文帶你深入了解Angular11
本篇文章要跟大家介紹Angular11。有一定的參考價值,有需要的朋友可以參考一下,希望對大家有幫助。
Angular經歷了版本1.0到2.0的飛躍式發展,結合TypeScript這一強有力的工具,Angular正在成為大型前端的重要選項,本問主要介紹了Anguar 10的基本概念,透過對應程式碼,幫助讀者朋友們快速入手。 【相關推薦:《angular教學》】
一、Angular發展里程
AngularJS原本是由Misko Hevery和Adam Abrons在2009年利用業餘時間開發的個人項目,最初的項目名稱叫做GetAngular,設計目標是讓Web設計師(非開發者)只使用HTML標籤來創建簡單的應用程式。隨著時間的推移,AngularJS演變成了一個全面的開發框架。 2010年,為了推動Google Feedback開發速度和專案的進展,Misko Hevery對基於GWT的Google Feedbac進行重構,將原來17000多行對程式碼壓縮到只有1500多行,從此Angularjs引起了重視,AngularJS轉變成Google的公司項目。
Angular1.0引入了雙向資料綁定的概念。 2016年微軟和Google進行了合作,並採用TypeScript作為新的開發語言,發布了Angular2.0。 Angular2.0和Angularjs1.x是完全不同的架構,Angular2.0以後的版本統稱Angular2 。 Angular1.x的使用者群體也比較龐大,對應版本架構也持續維護,目前最新版本是1.8.2。 Angular2 的最新版本是11.0.0。
二、發展概況
#2.1 雙向資料綁定
在常規的前端開發中,往往資料和視圖是透過單一項目綁定的方式進行關聯。這種模型的好處是結果相對簡單,model負責資料的更新,結合template進行渲染,view層只負責展示。這種結構的缺點是view層的資料變化無法回饋到model層,對於互動性較強的頁面無法滿足需求。這時候雙向資料綁定應運而生。
![]() |
![]() |
---|---|
2.2 核心特性變化
Angularjs雙向綁定方式—髒檢查:
watch = { /** 当前的watch对象观测的数据名 **/ name: ‘’, /** 得到新值 **/ getNewValue: function($scope) { ... return newValue; }, /** 当数据发生改变时需要执行的操作 **/ listener: function(newValue, oldValue) { ... } }
任何原生的事件都不會觸發髒檢查,必須得呼叫<span class="katex--inline"><span class="katex"><span class="katex-html"><span class="base"><span class="mord mathdefault">s</span><span class="mord mathdefault">c</span><span class="mord mathdefault">o</span><span class="mord mathdefault">#p </span><span class="mord mathdefault">e</span><span class="mord">.</span></span></span></span></span>apply
通知angular更新UI。
Angular雙向綁定方式—猴子補丁:
function patchThen(Ctor: Function) { ... const originalThen = proto.then; proto[symbolThen] = originalThen; Ctor.prototype.then = function(onResolve: any, onReject: any) { const wrapped = new ZoneAwarePromise((resolve, reject) => { originalThen.call(this, resolve, reject); }); return wrapped.then(onResolve, onReject); }; ... }
Angular2 中有了Zone.js。原生隨便用,setTimeout,addEventListener、promise等都在ngZone中執行,angular並在ngZone中setup了對應的鉤子,通知angular2做對應的髒檢查處理,然後更新DOM。
三、基本概念
- Module (模組)
- Component(元件)
- Template(範本)
- Metadata(元資料)
- Data Binding(資料綁定)
- Directive(指令)
- Service(服務)
- Dependency Injection(依賴注入)
3.1 Module (模組)
- 應用模組化
- 模組是一個功能緊密的程式碼區塊,至少有一個根模組NgModule(AppModule)
// src/app/app.module.ts import { NgModule } from '@angular/core'; import { BrowserModule } from '@angular/platform-browser'; @NgModule({ imports: [ BrowserModule ], providers: [ Logger ], declarations: [ AppComponent ], exports: [ AppComponent ], bootstrap: [ AppComponent ] }) export class AppModule { }
3.2 Component(元件)
- ##元件控制畫面上被稱為視圖的一小片區域
- 在一個類別中定義元件的應用邏輯(主要用來支援視圖)。類別和視圖透過一個屬性和方法的API進行互動
- 透過生命週期鉤子執行元件的建立、更新和銷毀
// src/app/hero-list.component.ts (class) export class HeroListComponent implements OnInit { heroes: Hero[]; selectedHero: Hero; constructor(private service: HeroService) { } ngOnInit() { this.heroes = this.service.getHeroes(); } selectHero(hero: Hero) { this.selectedHero = hero; } }
// src/app/hero-list.component.html <li *ngFor="let hero of heroes" (click)="onSelect(hero)">
3.3 Template(模板)
- 以HTML的形式告訴Angular如何渲染元件
- HTML帶有Angular指令(NgClass、NgStyle、NgIf、NgFor…)
- 自訂元件
// src/app/hero-list.component.html <h2 id="Hero-nbsp-List">Hero List</h2> <p><i>Pick a hero from the list</i></p> <ul> <li *ngFor="let hero of heroes" (click)="selectHero(hero)"> {{hero.name}} </li> </ul> <app-hero-detail *ngIf="selectedHero" [hero]="selectedHero"></app-hero-detail>
登入後複製3.4 Metadata(元資料)
Metadata決定Angular的一個類別是元件
用TypeScript附加metadata的簡單方法是用修飾器- @Component函數接受配置物件並轉換為metadata
- 模版、metadata和元件一起控制視圖
![]() | ![]() | #把資料值推送到HTML 控制項中,並將來自使用者的回應轉換成動作和對值的更新![]() | 範本、父子元件之間通訊
---|---|---|
// src/app/hero-list.component.html (binding) <li>{{hero.name}}</li> <app-hero-detail [hero]="selectedHero"></app-hero-detail> <li (click)="selectHero(hero)"></li>
3.6 Directive(指令)
- 带有@Directive() 装饰器的类,指示对DOM进行转换
- 结构型指令和属性型指令
结构型指令:通过添加、移除或者替换DOM元素来修改布局
// src/app/hero-list.component.html (structural) <li *ngFor="let hero of heroes"></li> <app-hero-detail *ngIf="selectedHero"></app-hero-detail>
属性型指令:修改现有元素的外观或行为
// src/app/hero-detail.component.html (ngModel) <input [(ngModel)]="hero.name">
3.7 Service(服务)
- 广义:包括应用所需的任何值、函数或特性,狭义:明确定义了用途的类
- @Injectable() 装饰器来提供元数据
// src/app/logger.service.ts (class) export class Logger { log(msg: any) { console.log(msg); } error(msg: any) { console.error(msg); } warn(msg: any) { console.warn(msg); } }
// src/app/hero.service.ts (class) export class HeroService { private heroes: Hero[] = []; constructor( private backend: BackendService, private logger: Logger) { } getHeroes() { this.backend.getAll(Hero).then( (heroes: Hero[]) => { this.logger.log(`Fetched ${heroes.length} heroes.`); this.heroes.push(...heroes); // fill cache }); return this.heroes; } }
3.8 Dependency Injection(依赖注入)
- 为一个类的实例提供全部依赖的方法,大部分依赖是服务
- 全应用级别注入器机制
- 注入前必须注册一个提供者(Provider),然后返回服务类本身
全局注册
@Injectable({ providedIn: 'root', })
特定注册
@NgModule({ providers: [ BackendService, Logger ], ... })
注入
// src/app/hero-list.component.ts (component providers) @Component({ selector: 'app-hero-list', templateUrl: './hero-list.component.html', providers: [ HeroService ] })
四、创建第一Angular项目
4.1 基于Angular CLI
- 安装Node.js 的当前版、活跃 LTS 版或维护期 LTS版
- 安装Angular CLI
npm install -g @angular/cli
- 创作工作空间和初始应用
npm new my-app
- 运行应用
cd my-app ng server --open
4.2 基于Angular Quickstart
- 克隆Quickstart项目
git clone https://github.com/angular/quickstart.git my-app
- 进入项目并安装依赖
cd ./my-app npm run install
- 启动项目
npm start
五、对比VUE
5.1 技术对比
主要点 | Angular | VUE |
---|---|---|
设计目标 | 全面的解决方案(浏览器端、服务端、客户端),基本包含了开发全流程 | 渐进增强,扩展性强,用户选择余地大 |
组件 | 组件是ng2+应用核心,支持Web Component标准,组件生命周期明确 | 完善的组件系统,可以从template生成或者render渲染,组件有明确的生命周期,使用virtual dom渲染 |
异步处理 | 原生支持RxJS,通过流模型处理异步任务 | 没有官方异步处理方案,可以用Promise,也可以用RxJS染 |
构建部署 | 支持Just In Time(JIT)和Ahead Of Time(AOT)模式,配合tree shaking可以大幅减少代码体积 | 配合Webpack打包工具,在不引入组件的情况下,体积更小 |
状态管理 | ngrx | vuex |
安全 | 对不信值进行编码,避免XSS攻击,使用离线模版编译器,防止模版注入。官方http库防止XSRF | 没有强制性阻止XSS攻击机制,输出HTML要注意配合v-html指令 |
优点 | 框架对几乎任何场景,都提供了标准化,更工程化,更适合大型项目多人协作面向新特性,发展空间大 | 框架可被不同程度的使用,可单独使用核心,也可加入状态管理,提供了更多选项。适合初期快速迭代,性能上没有很大缺陷 |
缺点 | 使用大量第三方库和组件,增加了潜在风险,应用性能可控性降低 | 由于提供了开发选项,多人协作下,对与使用程度和场景的处理可能不一样,随着项目增大,以快为特点的技术,在工程化和代码管理上可能存在困难。需要程序员手动实现类似依赖注入的功能、代码组织 |
选型 | 业务要求稳定、能够增量开发的项目 | 快速迭代、可以被替换的项目 |
5.2 开源组件库资源对比
Angular | Vue |
---|---|
Angular Material2 | Element UI |
DEVUI | Mint UI |
PrimeNg | iView UI |
Kendo UI | Bootstrap-Vue UI |
Ng-lightning | Ant Design Vue UI |
Ng-bootstrap | AT-UI UI |
NG-ZORRO | cube-ui UI |
NGX Bootstrap | Muse-UI UI |
更多编程相关知识,请访问:编程视频!!
以上是一文帶你深入了解Angular11的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

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

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

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

JavaScript是現代Web開發的基石,它的主要功能包括事件驅動編程、動態內容生成和異步編程。 1)事件驅動編程允許網頁根據用戶操作動態變化。 2)動態內容生成使得頁面內容可以根據條件調整。 3)異步編程確保用戶界面不被阻塞。 JavaScript廣泛應用於網頁交互、單頁面應用和服務器端開發,極大地提升了用戶體驗和跨平台開發的靈活性。

Python和JavaScript開發者的薪資沒有絕對的高低,具體取決於技能和行業需求。 1.Python在數據科學和機器學習領域可能薪資更高。 2.JavaScript在前端和全棧開發中需求大,薪資也可觀。 3.影響因素包括經驗、地理位置、公司規模和特定技能。

如何在JavaScript中將具有相同ID的數組元素合併到一個對像中?在處理數據時,我們常常會遇到需要將具有相同ID�...

學習JavaScript不難,但有挑戰。 1)理解基礎概念如變量、數據類型、函數等。 2)掌握異步編程,通過事件循環實現。 3)使用DOM操作和Promise處理異步請求。 4)避免常見錯誤,使用調試技巧。 5)優化性能,遵循最佳實踐。

實現視差滾動和元素動畫效果的探討本文將探討如何實現類似資生堂官網(https://www.shiseido.co.jp/sb/wonderland/)中�...

JavaScript的最新趨勢包括TypeScript的崛起、現代框架和庫的流行以及WebAssembly的應用。未來前景涵蓋更強大的類型系統、服務器端JavaScript的發展、人工智能和機器學習的擴展以及物聯網和邊緣計算的潛力。

深入探討console.log輸出差異的根源本文將分析一段代碼中console.log函數輸出結果的差異,並解釋其背後的原因。 �...
