精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Angular框架解讀--依賴注入的引導過程

開發 前端
本文主要圍繞 Angular 中的最大特點——依賴注入,介紹 Angular 依賴注入在體系在應用引導過程中的的設計和實現。

 [[412840]]

作為“為大型前端項目”而設計的前端框架,Angular 其實有許多值得參考和學習的設計,本系列主要用于研究這些設計和功能的實現原理。本文主要圍繞 Angular 中的最大特點——依賴注入,介紹 Angular 依賴注入在體系在應用引導過程中的的設計和實現。

多級依賴注入中,介紹了模塊注入器和元素注入器兩種層次結構的注入器。那么,Angular 在引導過程中,又是如何初始化根模塊和入口組件的呢?

Angular 的引導過程

前面我們說到,Angular 應用在瀏覽器中引導時,會創建瀏覽器平臺,并引導根模塊:

  1. platformBrowserDynamic().bootstrapModule(AppModule); 

引導根模塊

根模塊 AppModule

在 Angular 中,每個應用有至少一個 Angular 模塊,根模塊就是你用來引導此應用的模塊,它通常命名為 AppModule。

當你使用 Angular CLI 命令 ng new 生成一個應用時,其默認的 AppModule 是這樣的:

  1. import { BrowserModule } from '@angular/platform-browser'
  2. import { NgModule } from '@angular/core'
  3.  
  4. import { AppComponent } from './app.component'
  5.  
  6. @NgModule({ 
  7.   declarations: [ 
  8.     AppComponent 
  9.   ], 
  10.   imports: [ 
  11.     BrowserModule 
  12.   ], 
  13.   providers: [], 
  14.   bootstrap: [AppComponent] 
  15. }) 
  16. export class AppModule { } 

引導根模塊的過程

我們來看看平臺層引導根模塊的過程中都做了些什么:

  1. @Injectable() 
  2. export class PlatformRef { 
  3.   ... 
  4.  
  5.   bootstrapModuleFactory<M>(moduleFactory: NgModuleFactory<M>, options?: BootstrapOptions): 
  6.       Promise<NgModuleRef<M>> { 
  7.     // 由于實例化模塊時,會需要創建一些提供者,所以這里需要在實例化模塊之前創建 NgZone 
  8.     // 因此,這里創建了一個僅包含新 NgZone 的微型父注入器,并將其作為父傳遞給 NgModuleFactory 
  9.     const ngZoneOption = options ? options.ngZone : undefined; 
  10.     const ngZoneEventCoalescing = (options && options.ngZoneEventCoalescing) || false
  11.     const ngZoneRunCoalescing = (options && options.ngZoneRunCoalescing) || false
  12.     const ngZone = getNgZone(ngZoneOption, {ngZoneEventCoalescing, ngZoneRunCoalescing}); 
  13.     const providers: StaticProvider[] = [{provide: NgZone, useValue: ngZone}]; 
  14.     // ApplicationRef 將在 Angular zone 之外創建 
  15.     return ngZone.run(() => { 
  16.       // 在 ngZone.run 中創建 ngZoneInjector,以便在 Angular zone 中創建所有實例化的服務 
  17.       const ngZoneInjector = Injector.create( 
  18.           {providers: providers, parent: this.injector, name: moduleFactory.moduleType.name}); 
  19.       const moduleRef = <InternalNgModuleRef<M>>moduleFactory.create(ngZoneInjector); 
  20.       const exceptionHandler: ErrorHandler|null = moduleRef.injector.get(ErrorHandler, null); 
  21.       if (!exceptionHandler) { 
  22.         throw new Error('No ErrorHandler. Is platform module (BrowserModule) included?'); 
  23.       } 
  24.       ... 
  25.       return _callAndReportToErrorHandler(exceptionHandler, ngZone!, () => { 
  26.         const initStatus: ApplicationInitStatus = moduleRef.injector.get(ApplicationInitStatus); 
  27.         initStatus.runInitializers(); 
  28.         return initStatus.donePromise.then(() => { 
  29.           ... 
  30.           // 引導模塊 
  31.           this._moduleDoBootstrap(moduleRef); 
  32.           return moduleRef; 
  33.         }); 
  34.       }); 
  35.     }); 
  36.   } 
  37.  
  38.   bootstrapModule<M>( 
  39.       moduleType: Type<M>, 
  40.       compilerOptions: (CompilerOptions&BootstrapOptions)| 
  41.       Array<CompilerOptions&BootstrapOptions> = []): Promise<NgModuleRef<M>> { 
  42.     const options = optionsReducer({}, compilerOptions); 
  43.     // 編譯并創建 @NgModule 的實例 
  44.     return compileNgModuleFactory(this.injector, options, moduleType) 
  45.         .then(moduleFactory => this.bootstrapModuleFactory(moduleFactory, options)); 
  46.   } 
  47.  
  48.   private _moduleDoBootstrap(moduleRef: InternalNgModuleRef<any>): void { 
  49.     const appRef = moduleRef.injector.get(ApplicationRef) as ApplicationRef; 
  50.     // 引導應用程序 
  51.     if (moduleRef._bootstrapComponents.length > 0) { 
  52.       // 在應用程序的根級別引導新組件 
  53.       moduleRef._bootstrapComponents.forEach(f => appRef.bootstrap(f)); 
  54.     } else if (moduleRef.instance.ngDoBootstrap) { 
  55.       moduleRef.instance.ngDoBootstrap(appRef); 
  56.     } else { 
  57.       ... 
  58.     } 
  59.     this._modules.push(moduleRef); 
  60.   } 

根模塊引導時,除了編譯并創建 AppModule 的實例,還會創建 NgZone,關于 NgZone 的請參考。在編譯和創建 AppModule 的過程中,便會創建 ApplicationRef ,即 Angular 應用程序。

引導 Angular 應用程序

前面在引導根模塊過程中,創建了 Angular 應用程序之后,便會在應用程序的根級別引導新組件:

  1. // 在應用程序的根級別引導新組件 
  2. moduleRef._bootstrapComponents.forEach(f => appRef.bootstrap(f)); 

我們來看看這個過程會發生什么。

應用程序 ApplicationRef

一個 Angular 應用程序,提供了以下的能力:

  1. @Injectable() 
  2. export class ApplicationRef { 
  3.   // 獲取已注冊到該應用程序的組件類型的列表 
  4.   public readonly componentTypes: Type<any>[] = []; 
  5.   // 獲取已注冊到該應用程序的組件的列表 
  6.   public readonly components: ComponentRef<any>[] = []; 
  7.   // 返回一個 Observable,指示應用程序何時穩定或不穩定 
  8.   // 如果在應用程序引導時,引導任何種類的周期性異步任務,則該應用程序將永遠不會穩定(例如輪詢過程) 
  9.   public readonly isStable!: Observable<boolean>; 
  10.  
  11.   constructor( 
  12.       private _zone: NgZone, private _injector: Injector, private _exceptionHandler: ErrorHandler, 
  13.       private _componentFactoryResolver: ComponentFactoryResolver, 
  14.       private _initStatus: ApplicationInitStatus) { 
  15.         // 創建時,主要進行兩件事: 
  16.         // 1. 宏任務結束后,檢測視圖是否需要更新。 
  17.         // 2. 在 Angular Zone 之外創建對 onStable 的預訂,以便在 Angular Zone 之外運行回調。 
  18.   } 
  19.   // 在應用程序的根級別引導新組件 
  20.   bootstrap<C>(componentOrFactory: ComponentFactory<C>|Type<C>, rootSelectorOrNode?: string|any): 
  21.       ComponentRef<C> {} 
  22.   // 調用此方法以顯式處理更改檢測及其副作用 
  23.   tick(): void {} 
  24.   // 關聯視圖,以便對其進行臟檢查,視圖銷毀后將自動分離 
  25.   attachView(viewRef: ViewRef): void {} 
  26.   // 再次從臟檢查中分離視圖 
  27.   detachView(viewRef: ViewRef): void {} 

那么,我們來看看 bootstrap() 過程中,Angular 都做了些什么。

在應用程序的根級別引導根組件

將新的根組件引導到應用程序中時,Angular 將指定的應用程序組件安裝到由 componentType 的選擇器標識的 DOM 元素上,并引導自動更改檢測以完成組件的初始化。

  1. @Injectable() 
  2. export class ApplicationRef { 
  3.   bootstrap<C>(componentOrFactory: ComponentFactory<C>|Type<C>, rootSelectorOrNode?: string|any): 
  4.       ComponentRef<C> { 
  5.     ... 
  6.     // 如果未與其他模塊綁定,則創建與當前模塊關聯的工廠 
  7.     const ngModule = 
  8.         isBoundToModule(componentFactory) ? undefined : this._injector.get(NgModuleRef); 
  9.     const selectorOrNode = rootSelectorOrNode || componentFactory.selector; 
  10.     // 創建組件 
  11.     const compRef = componentFactory.create(Injector.NULL, [], selectorOrNode, ngModule); 
  12.     const nativeElement = compRef.location.nativeElement; 
  13.     // 創建可測試服務掛鉤 
  14.     const testability = compRef.injector.get(Testability, null); 
  15.     const testabilityRegistry = testability && compRef.injector.get(TestabilityRegistry); 
  16.     if (testability && testabilityRegistry) { 
  17.       testabilityRegistry.registerApplication(nativeElement, testability); 
  18.     } 
  19.     // 組件銷毀時,銷毀關聯視圖以及相關的服務 
  20.     compRef.onDestroy(() => { 
  21.       this.detachView(compRef.hostView); 
  22.       remove(this.components, compRef); 
  23.       if (testabilityRegistry) { 
  24.         testabilityRegistry.unregisterApplication(nativeElement); 
  25.       } 
  26.     }); 
  27.     // 加載組件,包括關聯視圖、監聽變更等 
  28.     this._loadComponent(compRef); 
  29.     ... 
  30.     return compRef; 
  31.   } 

在創建根組件的過程中,會關聯 DOM 元素視圖、添加對狀態變更的檢測機制。

根組件是一個入口組件,Angular CLI 創建的默認應用只有一個組件 AppComponent ,Angular 會在引導過程中把它加載到 DOM 中。

在根組件的創建過程中,通常會根據根組件中引用到的其他組件,觸發一系列組件的創建并形成組件樹。大多數應用只有一個組件樹,并且只從一個根組件開始引導。

創建組件過程

Angular 中創建組件的過程如下:

  1. 當 Angular 創建組件類的新實例時,它會通過查看該組件類的構造函數,來決定該組件依賴哪些服務或其它依賴項。
  2. 當 Angular 發現某個組件依賴某個服務時,它會首先檢查是否該注入器中已經有了那個服務的任何現有實例。如果所請求的服務尚不存在,注入器就會使用以前注冊的服務提供者來制作一個,并把它加入注入器中,然后把該服務返回給 Angular。
  3. 當所有請求的服務已解析并返回時,Angular 可以用這些服務實例為參數,調用該組件的構造函數。

Angular 會在執行應用時創建注入器,第一個注入器是根注入器,創建于引導過程中。借助注入器繼承機制,可以把全應用級的服務注入到這些組件中。

到這里,Angular 分別完成了根模塊、根組件和組件樹的引導過程,通過編譯器則可以將組件和視圖渲染到頁面上。

總結

在應用程序的引導過程中,Angular 采取了以下步驟來加載我們的第一個視圖:

  1. index.html 
  2. Main.ts 

本文我們重點從根模塊的引導過程開始,介紹了引導 Angular 應用程序、引導根組件、組件的創建等過程。至于組件樹的創建和渲染,則可以參考 編譯器 相關的內容。

 

責任編輯:張燕妮 來源: Here. There.
相關推薦

2014-07-08 14:05:48

DaggerAndroid依賴

2009-05-21 16:41:22

GuiceJava依賴注入

2023-10-07 08:35:07

依賴注入Spring

2025-01-02 00:00:00

2022-12-29 08:54:53

依賴注入JavaScript

2015-06-17 16:01:30

ASP.NET

2023-06-28 08:16:50

Autofac應用程序

2015-09-02 11:22:36

JavaScript實現思路

2011-05-31 10:00:21

Android Spring 依賴注入

2011-03-29 09:51:58

GuiceIOC

2019-12-20 14:19:47

Linux操作系統引導

2023-07-11 09:14:12

Beanquarkus

2024-05-27 00:13:27

Go語言框架

2022-04-11 09:02:18

Swift依賴注

2017-08-16 16:00:05

PHPcontainer依賴注入

2024-12-30 12:00:00

.NET Core依賴注入屬性注入

2009-12-10 19:02:30

2009-10-09 17:51:15

RHEL引導故障

2016-12-28 09:30:37

Andriod安卓平臺依賴注入

2016-03-21 17:08:54

Java Spring注解區別
點贊
收藏

51CTO技術棧公眾號

国产精品久久占久久| 欧美成人免费电影| 成人黄色综合网站| 欧美有码在线观看| 性欧美13一14内谢| 播放一区二区| 一区在线观看视频| 成人午夜在线影院| 色播视频在线播放| 九九热爱视频精品视频| 91精品国产入口在线| 女人天堂av手机在线| 日本高清视频在线观看| 成人不卡免费av| 国产精品免费小视频| 欧美卡一卡二卡三| 怕怕欧美视频免费大全| 欧美一级黄色大片| 色综合天天色综合| 国产在线观看www| 亚洲欧洲精品天堂一级| 欧美日韩另类综合| 男人天堂手机在线观看| 久久精品二区亚洲w码| 91国产美女在线观看| 国产一区二区三区视频播放| 欧美日韩一区二区三区在线电影| 欧美乱熟臀69xxxxxx| 欧美精品一区免费| 日本高清在线观看| 亚洲欧洲三级电影| 欧美一级二级三级九九九| 风流老熟女一区二区三区| 麻豆免费看一区二区三区| 88xx成人精品| 久草视频精品在线| 一区二区免费不卡在线| 国产一区二区三区在线视频| 免费日本黄色网址| 亚洲一区二区三区免费| 欧美日韩国产一二三| 50路60路老熟妇啪啪| sm捆绑调教国产免费网站在线观看| 亚洲欧洲三级电影| 中文字幕在线亚洲精品| 91精品专区| 中文字幕av一区二区三区高| 热re99久久精品国99热蜜月| 图片区 小说区 区 亚洲五月| 国产乱码精品1区2区3区| 国产精品网站视频| 中文字幕人妻精品一区| 日韩和欧美一区二区三区| 欧美有码在线观看| 天堂网av手机版| 亚洲一区二区三区四区五区午夜| 97精品久久久中文字幕免费| 精品少妇久久久久久888优播| 仙踪林久久久久久久999| 亚洲丝袜av一区| 无码人妻精品一区二区中文| 国产一区二区精品久| 日韩精品在线影院| 久久国产精品影院| 国产一区二区三区网| 国产小视频国产精品| 国产午夜福利一区| 不卡av一区二区| 日韩在线www| 污软件在线观看| 亚洲欧美一区在线| 韩国日本不卡在线| 成人毛片一区二区三区| 麻豆中文一区二区| 91亚洲精品丁香在线观看| www.亚洲黄色| 99在线热播精品免费| 美女亚洲精品| 1pondo在线播放免费| 亚洲婷婷国产精品电影人久久| 综合视频免费看| 少女频道在线观看高清| 亚洲尤物在线视频观看| 成熟了的熟妇毛茸茸| 97精品国产综合久久久动漫日韩 | 国产福利一区二区三区视频在线| 91免费在线视频| 日本韩国免费观看| 91免费视频网| 中文精品一区二区三区 | 亚洲人成精品久久久久| 97中文字幕在线| 91在线超碰| 在线观看三级视频欧美| av噜噜在线观看| 天堂资源在线亚洲| 久久精品视频在线播放| 国产极品美女高潮无套嗷嗷叫酒店| 一区二区动漫| 国产在线播放91| 天天干天天摸天天操| 中文在线免费一区三区高中清不卡| 在线视频不卡一区二区| 高清在线视频不卡| 欧美另类z0zxhd电影| 污片免费在线观看| 久久久久蜜桃| 国产成人亚洲精品| 亚洲欧美激情国产综合久久久| 久久久久国产精品麻豆| 国产一二三四区在线观看| 中国色在线日|韩| 欧美一区二区在线视频| 真实乱视频国产免费观看 | 人妻精品无码一区二区三区| 视频91a欧美| 精品亚洲二区| 亚洲综合影视| 国产午夜精品理论片a级大结局| 一区二区不卡视频| 亚洲精品永久免费视频| 91麻豆精品国产91久久久久久久久 | 色综合久久88色综合天天免费| 成年人三级黄色片| 免费av一区二区三区四区| 久久久噜噜噜久久久| 国产精品爽爽久久久久久| 久久久国产午夜精品| 毛片在线播放视频| 91精品日本| 久久精品亚洲国产| 中文字幕永久在线观看| 久久精品视频在线免费观看| 欧美精品卡一卡二| 日韩视频一二区| 粗暴蹂躏中文一区二区三区| 中文字幕777| 国产欧美日韩精品a在线观看| 欧美国产亚洲一区| 老牛精品亚洲成av人片| 欧美国产日韩二区| 亚洲成人黄色片| 亚洲一区国产视频| 久久久久久无码精品人妻一区二区| 成人网18免费网站| 国产精品扒开腿做| 国产精品久久久免费看| 91电影在线播放| 偷窥少妇高潮呻吟av久久免费| 亚洲午夜激情影院| 久久一区91| 国产精品一二三在线| 欧美偷拍视频| 精品久久久久人成| 亚洲精品理论片| 国产美女诱惑一区二区| 欧美日韩亚洲免费| 超碰一区二区| 精品丝袜一区二区三区| 日日夜夜综合网| 91免费在线看| 亚洲男人天堂色| 第一会所sis001亚洲| 国产精品免费在线免费| 在线观看免费黄色| 337p亚洲精品色噜噜狠狠| 国产成人av免费在线观看| 国产精品性做久久久久久| 国产 国语对白 露脸| 99re8这里有精品热视频8在线| 欧美激情综合色综合啪啪五月| 成人精品在线播放| 午夜电影久久久| 国产真实乱人偷精品人妻| 日本强好片久久久久久aaa| 亚洲精品视频一区二区三区| 超碰国产一区| 亚洲人成电影网站色xx| 亚洲影视一区二区| 一区二区三区免费| 这里只有精品在线观看视频| 欧美特黄一区| 久久综合九九| 国产精品99久久久久久董美香| 久久人体大胆视频| 四虎永久在线观看| 色婷婷综合五月| 中文字幕无码日韩专区免费| 国产v日产∨综合v精品视频| 欧美 日韩精品| 色中色综合网| 国产伦精品一区二区三区高清版| 欧美性猛交xxx高清大费中文| 中文字幕成人在线| 欧美一区,二区| 在线观看视频一区二区欧美日韩| 免费在线观看a级片| proumb性欧美在线观看| 日本老熟妇毛茸茸| 欧美日本久久| 日韩欧美精品一区二区三区经典 | 亚洲午夜激情在线| 欧美裸体网站| 中文字幕人成人乱码亚洲电影| 夜久久久久久| 亚洲高清视频一区| 亚洲一区二区三区在线免费| 日韩免费在线观看视频| v片在线观看| 亚洲欧美在线x视频| 国产福利小视频| 欧美亚洲丝袜传媒另类| 中文字幕在线观看免费视频| 亚洲色图欧美激情| 佐佐木明希av| 狠狠干 狠狠操| 色偷偷中文字幕| av网站免费在线看| 久久久久久久久久成人| 国产aⅴ爽av久久久久成人| 国产高清一级毛片在线不卡| av电影高清在线观看| 国产乱码精品一区二三赶尸艳谈| 免费在线成人激情电影| 日韩深夜福利| 国产婷婷精品| av男人天堂一区| 精品久久久久久中文字幕一区奶水 | 青青草在线观看视频| 国产又粗又猛又爽又黄的视频四季 | 同性恋视频一区| 人人狠狠综合久久亚洲婷婷| 麻豆9191精品国产| 一本色道久久综合一区| 美女视频黄频大全不卡视频在线播放| 久久婷婷色综合| 国产视频精品久久久| 无码人妻丰满熟妇区毛片蜜桃精品| 日韩电影网1区2区| 欧美三级在线观看视频| 黄色成人av网站| 奇米777四色影视在线看| 久久久久电影| 一区二区三区四区欧美日韩| 欧美丝袜一区| 日韩av不卡播放| 国产精选一区| 日韩av影视| 久久av资源| 日本精品一区| 国产成人1区| 清纯唯美一区二区三区| 欧美三级情趣内衣| 五码日韩精品一区二区三区视频| 欧美日韩一二| 在线成人av电影| 999精品一区| 日韩最新中文字幕| 午夜国产欧美理论在线播放| 国内外成人激情免费视频| 在线国产一区二区| 亚洲成人动漫在线| 国产在线欧美| 亚洲一区二区三区av无码| 伊人精品视频| 妺妺窝人体色www在线小说| 香蕉亚洲视频| 91香蕉视频污版| 精品一区二区三区在线播放视频| 亚州精品一二三区| 精品一区二区av| 丰满少妇xbxb毛片日本| 26uuu久久综合| 亚洲熟女少妇一区二区| 亚洲视频综合在线| 精品一区二区三区四| 姬川优奈aav一区二区| 狠狠人妻久久久久久综合| 欧美色区777第一页| 国产精品无码久久久久成人app| 欧美一区二区久久久| 三级网站在线看| 一区二区福利视频| av毛片在线免费| 国产69精品久久久| 久久av日韩| 国产精品二区在线| 国产精品免费大片| 久久久久福利视频| 久久一区欧美| 黄色片免费网址| 成人h动漫精品一区二| 中国女人特级毛片| 一区二区视频在线| 无码人妻av一区二区三区波多野| 欧美一级夜夜爽| 嫩草精品影院| 欧美乱人伦中文字幕在线| 亚洲国产成人二区| 亚洲自拍av在线| 欧美人与牛zoz0性行为| 日韩精品免费一区| 秋霞电影一区二区| 这里只有精品在线观看视频| 中文字幕一区二区三区精华液 | 99久久激情视频| 国产精品自拍网站| 日本成人免费视频| 午夜影视日本亚洲欧洲精品| 91av久久久| 亚洲欧美激情在线视频| 欧洲性视频在线播放| 日本高清不卡在线| 午夜免费欧美电影| 亚洲精品一区二区三区蜜桃久| 亚洲国产日韩欧美一区二区三区| 婷婷免费在线观看| 久久久久国产精品麻豆| 日韩精品在线免费看| 日韩一区二区电影| 巨大荫蒂视频欧美另类大| 欧美性做爰毛片| 99香蕉久久| 97久久国产亚洲精品超碰热| 免费av成人在线| 级毛片内射视频| 狠狠色噜噜狠狠狠狠97| 成人乱码一区二区三区| 久久99精品久久久久久青青91| 日本亚洲欧洲无免费码在线| 奇米视频888战线精品播放| 亚洲精品社区| 好男人香蕉影院| 亚洲一区二区偷拍精品| a天堂视频在线| 久久精品人人爽| av成人在线网站| 一区二区三区四区欧美| 久久精品99国产精品| www.涩涩爱| 欧美日韩久久久| 中文字幕日本在线观看| 国产精品视频免费在线观看| 欧美日韩国产传媒| www黄色在线| 国产日本欧美一区二区| 日韩在线视频不卡| 国产亚洲精品久久久久动| 日韩国产激情| 日本一区二区三区四区高清视频| 午夜在线观看免费一区| 国产美女精品久久| 欧美性猛交xxxx久久久| 青草久久伊人| 国产精品va在线播放我和闺蜜| 欧美日韩爱爱| 在线免费观看av的网站| 国产精品久久福利| 国产又粗又猛又爽| 欧美裸体xxxx极品少妇| 大型av综合网站| 国产精品免费入口| 久久日韩粉嫩一区二区三区| 黄色网址中文字幕| 久久精品2019中文字幕| 视频二区欧美毛片免费观看| 日韩网站在线免费观看| 97超碰欧美中文字幕| 精品国产乱子伦| 久久精品亚洲热| 国产精品久久久久av蜜臀| 激情综合在线观看| 日本一区二区三区高清不卡| 国产精品久久影视| 久久久亚洲国产天美传媒修理工| 曰本三级日本三级日本三级| 国产成人av福利| 国产成人精品片| 中文字幕亚洲一区| 欧美黄视频在线观看| 天天夜碰日日摸日日澡性色av| 国产午夜亚洲精品不卡| 国产精品视频在线观看免费 | 久久综合婷婷综合| 日韩高清不卡一区二区三区| 999精品视频在线观看播放| 欧美www视频| 三级成人黄色影院| 国产免费一区二区三区四在线播放 | 亚洲一级二级在线| 视频午夜在线| 国产欧美一区二区三区视频 | 国外成人在线直播| 欧美亚洲国产一区| 精品人妻二区中文字幕| 欧美亚洲综合色| 9765激情中文在线| 一区二区冒白浆视频| 成人动漫精品一区二区| 91午夜交换视频|