Angular 4依賴(lài)注入學(xué)習(xí)教程之簡(jiǎn)介(一)
學(xué)習(xí)目錄
- Angular 4 依賴(lài)注入教程之一 依賴(lài)注入簡(jiǎn)介
- Angular 4 依賴(lài)注入教程之二 組件服務(wù)注入
- Angular 4 依賴(lài)注入教程之三 ClassProvider的使用
- Angular 4 依賴(lài)注入教程之四 FactoryProvider的使用
- Angular 4 依賴(lài)注入教程之五 FactoryProvider配置依賴(lài)對(duì)象
- Angular 4 依賴(lài)注入教程之六 Injectable 裝飾器
- Angular 4 依賴(lài)注入教程之七 ValueProvider的使用
- Angular 4 依賴(lài)注入教程之八 InjectToken的使用
本文主要給大家介紹的是關(guān)于Angular 4 依賴(lài)注入簡(jiǎn)介的相關(guān)內(nèi)容,分享出來(lái)供大家參考學(xué)習(xí),下面來(lái)看看詳細(xì)的介紹:
本系列教程的開(kāi)發(fā)環(huán)境及開(kāi)發(fā)語(yǔ)言:
基礎(chǔ)知識(shí)
Angular CLI 基本使用
1、安裝 Angular CLI (可選)
npm install -g @angular/cli
2、創(chuàng)建新的項(xiàng)目
ng new PROJECT-NAME
3、啟動(dòng)本地服務(wù)器
cd PROJECT-NAME ng serve
依賴(lài)注入簡(jiǎn)介
在介紹依賴(lài)注入的概念和作用前,我們先來(lái)看個(gè)例子。各位看官請(qǐng)睜大眼睛,我要開(kāi)始 "閉門(mén)造車(chē)" 了。
示例說(shuō)明
一輛車(chē)內(nèi)部構(gòu)造很復(fù)雜,出于簡(jiǎn)單考慮,我們就只考慮三個(gè)部分:車(chē)身、車(chē)門(mén)和引擎。接下來(lái)我們來(lái)定義各個(gè)部分。
1.定義車(chē)身類(lèi)
export default class Body { }
2.定義車(chē)門(mén)類(lèi)
export default class Doors { }
3.定義車(chē)引擎類(lèi)
export default class Engine { start() { console.log('🚗開(kāi)動(dòng)鳥(niǎo)~~~'); } }
4.定義汽車(chē)類(lèi)
import Engine from './engine'; import Doors from './doors'; import Body from './body'; export default class Car { engine: Engine; doors: Doors; body: Body; constructor() { this.engine = new Engine(); this.body = new Body(); this.doors = new Doors(); } run() { this.engine.start(); } }
一切已準(zhǔn)備就緒,我們馬上來(lái)造一輛車(chē):
let car = new Car(); // 造輛新車(chē) car.run(); // 開(kāi)車(chē)上路咯
車(chē)已經(jīng)可以成功上路,但卻存在以下問(wèn)題:
- 問(wèn)題一:在創(chuàng)建新車(chē)的時(shí)候,你沒(méi)有選擇,假設(shè)你想更換汽車(chē)引擎的話,按照目前的方案,是實(shí)現(xiàn)不了的。
- 問(wèn)題二:在汽車(chē)類(lèi)內(nèi)部,你需要在構(gòu)造函數(shù)中手動(dòng)去創(chuàng)建各個(gè)部件。
為了解決第一個(gè)問(wèn)題,提供更靈活的方案,我們可以重構(gòu)一下已定義的汽車(chē)類(lèi),具體如下:
export default class Car { engine: Engine; doors: Doors; body: Body; constructor(engine, body, doors) { this.engine = engine; this.body = body; this.doors = doors; } run() { this.engine.start(); } }
重構(gòu)完汽車(chē)類(lèi),我們來(lái)重新造輛新車(chē):
let engine = new NewEngine(); let body = new Body(); let doors = new Doors(); this.car = new Car(engine, body, doors); this.car.run();
此時(shí)我們已經(jīng)解決了上面提到的第一個(gè)問(wèn)題,要解決第二個(gè)問(wèn)題我們要先介紹一下依賴(lài)注入的概念。
依賴(lài)注入的概念
在軟件工程中,依賴(lài)注入是種實(shí)現(xiàn)控制反轉(zhuǎn)用于解決依賴(lài)性設(shè)計(jì)模式。一個(gè)依賴(lài)關(guān)系指的是可被利用的一種對(duì)象(即服務(wù)提供端) 。依賴(lài)注入是將所依賴(lài)的傳遞給將使用的從屬對(duì)象(即客戶(hù)端)。該服務(wù)是將會(huì)變成客戶(hù)端的狀態(tài)的一部分。 傳遞服務(wù)給客戶(hù)端,而非允許客戶(hù)端來(lái)建立或?qū)ふ曳?wù),是本設(shè)計(jì)模式的基本要求。 —— 維基百科
看完概念是不是已經(jīng)暈了,其實(shí)我們只要記住依賴(lài)注入的三種角色:使用者、服務(wù)(依賴(lài)對(duì)象)及注入器(Injector)。接下來(lái)我們馬上來(lái)看一下 Angular 中依賴(lài)注入的應(yīng)用。
Angular 依賴(lài)注入的應(yīng)用
更新后的汽車(chē)類(lèi)
@Injectable() export default class Car { constructor( private engine: Engine, private body: Body, private doors: Doors) {} run() { this.engine.start(); } };
具體應(yīng)用
import { ReflectiveInjector } from '@angular/core'; let injector = ReflectiveInjector.resolveAndCreate([Car, Engine, Doors, Body]); let car = injector.get(Car); car.run();
看完上面的示例,我們前面提到的第二個(gè)問(wèn)題,已經(jīng)完美解決了哈。
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來(lái)一定的幫助,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
- 詳解AngularJS中的依賴(lài)注入機(jī)制
- 詳解Angularjs中的依賴(lài)注入
- AngularJS學(xué)習(xí)筆記之依賴(lài)注入詳解
- AngularJS 依賴(lài)注入詳解和簡(jiǎn)單實(shí)例
- AngularJS之依賴(lài)注入模擬實(shí)現(xiàn)
- AngularJS 依賴(lài)注入詳解及示例代碼
- 自學(xué)實(shí)現(xiàn)angularjs依賴(lài)注入
- AngularJS學(xué)習(xí)第二篇 AngularJS依賴(lài)注入
- AngularJS應(yīng)用開(kāi)發(fā)思維之依賴(lài)注入3
- 深入理解Angular中的依賴(lài)注入
相關(guān)文章
如何編寫(xiě)一個(gè)完整的Angular4 FormText 組件
本篇文章主要介紹了如何編寫(xiě)一個(gè)完整的Angular4 FormText 組件,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-11-11詳解如何在Angular優(yōu)雅編寫(xiě)HTTP請(qǐng)求
這篇文章主要介紹了詳解如何在Angular優(yōu)雅編寫(xiě)HTTP請(qǐng)求,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-12-12AngularJS實(shí)現(xiàn)路由實(shí)例
本文給大家分享的是使用angularjs路由框架實(shí)現(xiàn)的一個(gè)簡(jiǎn)單頁(yè)面跳轉(zhuǎn)功能,非常的實(shí)用,也很詳細(xì),有需要的小伙伴可以參考下2017-02-02詳解Angular5 服務(wù)端渲染實(shí)戰(zhàn)
本篇文章主要介紹了詳解Angular5 服務(wù)端渲染實(shí)戰(zhàn),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-01-01使用Chrome瀏覽器調(diào)試AngularJS應(yīng)用的方法
這篇文章主要介紹了使用Chrome瀏覽器調(diào)試AngularJS應(yīng)用的方法,AngularJS是非常熱門(mén)的JavaScript庫(kù),需要的朋友可以參考下2015-06-06Angularjs 實(shí)現(xiàn)動(dòng)態(tài)添加控件功能
這篇文章主要介紹了Angularjs 實(shí)現(xiàn)動(dòng)態(tài)添加控件功能,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2017-05-05Angular學(xué)習(xí)筆記之a(chǎn)ngular的$filter服務(wù)淺析
本文是小編記錄的angular學(xué)習(xí)筆記,通過(guò)本文首先給大家介紹了$filter服務(wù),然后介紹下內(nèi)置filter及filter的簡(jiǎn)單使用,非常不錯(cuò)具有參考借鑒價(jià)值,感興趣的朋友一起看看吧2016-11-11