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