Angular应用页面里appId的生成逻辑和位置
生活随笔
收集整理的這篇文章主要介紹了
Angular应用页面里appId的生成逻辑和位置
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
DomRendererFactory2類的構造函數里,看到三個輸入參數。我們感興趣的是,appId這個三位隨機字符,是如何生成的。
前面這個classRef是DomRendererFactory2的構造函數。后面是調用該構造函數傳入的輸入參數,我們要關注的appId也是這三個輸入參數之一。
輸入參數通過17396行…injectArgs依賴注入的方式生成。
…injectArgs的輸入參數:
真正的參數實例化,發生在這個函數??inject里:
所有injectionToken的實例化,都發生在上圖兩個方法里。
準備生成AppId了:
typeof fn是Object:
檢查record, 發現appId通過provider.useFactory創建:
provider.useFactory里就能看到生成appId的工廠函數了:
這就是我要找的隨機字符生成函數:_appIdRandomProviderFactory()
AppID的生成,本身沒有任何dependency:
直接生成三位隨機字符:
/*** @fileoverview added by tsickle* Generated from: packages/core/src/application_tokens.ts* @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc*/ /*** A DI Token representing a unique string id assigned to the application by Angular and used* primarily for prefixing application attributes and CSS styles when* {\@link ViewEncapsulation#Emulated ViewEncapsulation.Emulated} is being used.** If you need to avoid randomly generated value to be used as an application id, you can provide* a custom value via a DI provider <!-- TODO: provider --> configuring the root {\@link Injector}* using this token.* \@publicApi* @type {?}*/ const APP_ID = new InjectionToken('AppId'); /*** @return {?}*/ function _appIdRandomProviderFactory() {return `${_randomChar()}${_randomChar()}${_randomChar()}`; } /*** Providers that will generate a random APP_ID_TOKEN.* \@publicApi* @type {?}*/ const APP_ID_RANDOM_PROVIDER = {provide: APP_ID,useFactory: _appIdRandomProviderFactory,deps: (/** @type {?} */ ([])), }; /*** @return {?}*/ function _randomChar() {return String.fromCharCode(97 + Math.floor(Math.random() * 25)); }更多Jerry的原創文章,盡在:“汪子熙”:
總結
以上是生活随笔為你收集整理的Angular应用页面里appId的生成逻辑和位置的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: R 大小写转换
- 下一篇: 系统可靠性的技术设计