91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

angular 服務的單例模式(依賴注入模式下)詳解

發布時間:2020-10-04 14:42:07 來源:腳本之家 閱讀:259 作者:jsure 欄目:web開發

angular官方文檔單例服務的說明

單例模式就不要說了,懂點設計模式的都懂得,真有不明白的自行百度。

(解釋下angular的命名,angular就是angular2+,angular1叫angularjs,至于angular2,3,4,5,6只是angular的版本,通稱angular,希望小伙伴不要叫錯了)

單例模式如何在angular的服務中使用呢,angular的官方文檔中有這么一段話:

單例服務

服務在每個注入器的范圍內是單例的。 在任何一個注入器中,最多只會有同一個服務的一個實例。

這里只有一個根注入器,而 UserService 就是在該注入器中注冊的。 所以,在整個應用中只能有一個 UserService 實例,每個要求注入 UserService 的類都會得到這個服務實例。

不過,Angular DI 是一個 多級注入系統,這意味著各級注入器都可以創建它們自己的服務實例。 Angular 總會創建多級注入器。

籠統,并不知道依賴注入服務單例模式怎么用,要想弄明白很簡單,簡單的寫個例子實驗一下就可以了,下面我會給大家說一下我的實驗總結,幫助小伙伴節約一些這種乏味的探索時間。

實驗樣例代碼

服務代碼

import { Injectable } from '@angular/core';

@Injectable(
 //{providedIn: 'root'}
)
export class SingletonServiveTestService {
 private _name = "primaryName";
 constructor() { }
 setName (name){
  this._name = name;
 }
 getName(){
  return this._name;
 }
}

小伙伴可能會說了,這TM怎么會是單例模式。小伙伴不要激動,我也是這么想的,怎么TM怎么會是單例。不過在angular的依賴注入中,有幾種寫法確實會使這種代碼以單例模式的方式運行。

解釋下{providedIn: 'root'},一開始認為只要傳入這個對象,讓服務以root的方式提供給子module,子組件,然后這個服務就是單例的,后臺發現,這個對象和單例沒有半毛錢關系,它只是app.module中引入服務的另一種寫法,除了這個用處,沒有別的用處,所以下文中我們就不說添加和不添加{providedIn: 'root'}的情況了

注入代碼

注入分為Module.providers和Component.providers兩種;實驗的module是實現懶加載的。

上面代碼的測試結果(module都是懶加載的)

這三個結果已經代表各種情況了,如果小伙伴還想知道其他一些情況的下的結果,小伙伴可以自己動手寫個例子,或者給我留言

  • 在app.module.providers或者app.component.providers中依賴面進去這個服務,在子component和子module中的component中的構造函數中國呢注入進去這個服務,這個服務的表現特征是 單例 的。
  • 在懶加載的子module.providers 中依賴進去這個服務,在這個module下面的component中的構造函數中注入進去這個服務,這個服務表現特征是 單例 的。
  • 在component.providers中依賴進去這個服務,然后在component的構造函數中依賴注入進去這個服務,這個服務表現特征是 非單例 的.

單例不都通過靜態屬性來實現的嗎?

我認為單例就是實現屬性方法的保持一個實例,而angular中想用到單例多是實現一些數據整個項目通用,按照設計模式上講上面和下面的代碼都不是標準的單例模式的寫法,但是在實際使用中確實是達到了單例模式的目的,上嗎的有angular的官方文檔做背書,所以我就寫了上嗎那種在angular中可以是單例模式,至于下面這中我就叫靜態屬性單一模式,ts靜態屬性被編譯成正常的js,就是構造函數上的屬性而已,概念高大上,原理矮小low。

import { Injectable } from '@angular/core';

@Injectable()
export class SingletonServiveTestService {
 private static _name = "primaryName";

 constructor() { }
 setName (name){
  SingletonServiveTestService._name = name;
 }
 getName(){
  return SingletonServiveTestService._name;
 }
}

這個實驗著在各種情況下都能表現 單例 特征

這種方法萬金油,單例就用這中不久ok了,小伙伴寫代碼要考究,莫要粗放。結合上面代碼代碼的單例實現根據具體使用場景來選擇用那種方式。

真正嚴格的用單例模式的話是用不上angular服務的依賴注入的這套機制的。至于要不要使用單例拋掉依賴注入,看業務場景了。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

南和县| 清徐县| 济南市| 聊城市| 富源县| 瓦房店市| 鸡西市| 资兴市| 滨州市| 井冈山市| 额尔古纳市| 虞城县| 内丘县| 会理县| 江津市| 巴彦淖尔市| 长阳| 永春县| 禄丰县| 临海市| 黄龙县| 怀宁县| 方城县| 宁远县| 会泽县| 城固县| 克什克腾旗| 兴宁市| 永宁县| 邢台市| 潞城市| 房山区| 永年县| 宁夏| 司法| 辛集市| 青铜峡市| 丘北县| 陆河县| 肥城市| 互助|