網(wǎng)站首頁 編程語言 正文
看一個(gè)實(shí)際的例子:
import { Component, Inject } from '@angular/core';
import { Http } from '@angular/http';
@Component({
selector: 'example-component',
template: '<div>I am a component</div>'
})
class ExampleComponent {
constructor(@Inject(Http) private http) {
// use `this.http` which is the Http provider
}
}
此時(shí),@Inject 是指定此查找標(biāo)記的手動(dòng)方式,后跟小寫的 http 參數(shù)告訴 Angular 分配它的對象。
當(dāng)組件或服務(wù)需要大量依賴項(xiàng)時(shí),這可能(并且將會(huì))變得非常混亂。 由于 Angular 支持從發(fā)出的元數(shù)據(jù)中解析依賴關(guān)系,因此大多數(shù)時(shí)候不需要使用 @Inject。
我們唯一需要使用 @Inject 的地方是像 OpaqueToken 這樣的場景——它創(chuàng)建一個(gè)唯一的空白令牌,用作依賴注入提供程序。
我們使用@Inject 的原因是因?yàn)槲覀儾荒苁褂?OpaqueToken 作為參數(shù)的類型,例如下面的代碼將不會(huì)工作:
const myToken = new OpaqueToken('myValue');
@Component(...)
class ExampleComponent {
constructor(private token: myToken) {}
}
在這里,myToken 不是類型,它是一個(gè)值——這意味著 TypeScript 無法編譯它。 但是,當(dāng)我們將 @Inject 與 OpaqueToken 一起引入時(shí),整個(gè)依賴注入會(huì)重新開始工作:
const myToken = new OpaqueToken('myValue');
@Component(...)
class ExampleComponent {
constructor(@Inject(myToken) private token) {
// use the provider for `token`
}
}
上面提供了一個(gè)使用 @Inject 手動(dòng)指定要注入的令牌的示例,并顯示該令牌可以是任何值。 這意味著在 Angular 依賴注入的場景里,我們并不限于 TypeScript 歸類為“類型”的內(nèi)容。
再看另一個(gè)例子:
import { Component, Inject } from '@angular/core';
import { ChatWidget } from '../components/chat-widget';
@Component({
selector: 'app-root',
template: `Encryption: {{ encryption }}`
})
export class AppComponent {
encryption = this.chatWidget.chatSocket.encryption;
constructor(@Inject(ChatWidget) private chatWidget) { }
}
在上面我們通過調(diào)用 @Inject(ChatWidget)
要求chatWidget 成為Angular 與類符號ChatWidget 相關(guān)聯(lián)的單例。 重要的是要注意,我們使用 ChatWidget 進(jìn)行類型化并作為對其單例的引用。 我們沒有使用 ChatWidget 來實(shí)例化任何東西,Angular 在幕后為我們做這件事。
使用 TypeScript 時(shí),@Inject
僅用于注入原語(primitives)
。 TypeScript 的類型讓 Angular 在大多數(shù)情況下知道該做什么。 上面的示例將在 TypeScript 中簡化為:
import { Component } from '@angular/core';
import { ChatWidget } from '../components/chat-widget';
@Component({
selector: 'app',
template: `Encryption: {{ encryption }}`
})
export class App {
encryption = this.chatWidget.chatSocket.encryption;
constructor(private chatWidget: ChatWidget) { }
}
原文鏈接:https://blog.csdn.net/i042416/article/details/125853581
相關(guān)推薦
- 2023-01-31 利用Rust編寫一個(gè)簡單的字符串時(shí)鐘_Rust語言
- 2022-05-04 redis?zset實(shí)現(xiàn)滑動(dòng)窗口限流的代碼_Redis
- 2022-10-03 Python實(shí)現(xiàn)數(shù)據(jù)清洗的示例詳解_python
- 2023-01-07 利用Linux?Find命令快速查找文件方法_linux shell
- 2022-10-05 Iptables防火墻string模塊擴(kuò)展匹配規(guī)則_安全相關(guān)
- 2022-07-10 css盒子塌陷及其解決方法
- 2022-10-06 Python?PaddlePaddle機(jī)器學(xué)習(xí)之求解線性模型_python
- 2022-03-17 c++智能指針unique_ptr的使用_C 語言
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支