最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用?Angular?服務(wù)器端渲染?Transfer?State?Service

 更新時(shí)間:2022年06月27日 09:41:57   作者:??JerryWang_sap????  
這篇文章主要介紹了使用?Angular?服務(wù)器端渲染?Transfer?State?Service,假設(shè)我們使用?Angular?Universal?開(kāi)發(fā)一個(gè)服務(wù)器端渲染的?Angular?應(yīng)用,這個(gè)應(yīng)用會(huì)消費(fèi)一個(gè)第三方的?Restful?API

假設(shè)我們使用 Angular Universal 開(kāi)發(fā)一個(gè)服務(wù)器端渲染的 Angular 應(yīng)用,這個(gè)應(yīng)用會(huì)消費(fèi)一個(gè)第三方的 Restful API.

上述場(chǎng)景分為下列六個(gè)步驟:

  • 用戶(hù)向部署了 Angular 服務(wù)器端應(yīng)用的 Node.js 服務(wù)器發(fā)起頁(yè)面請(qǐng)求
  • Node.js 調(diào)用第三方 Restful API,
  • 第三方 Restful API 返回結(jié)果,這個(gè)結(jié)果被用于渲染最后的頁(yè)面
  • 服務(wù)器端渲染的頁(yè)面,返回給瀏覽器
  • Angular 在瀏覽器中引導(dǎo),并再次調(diào)用 Restful API
  • Restful API 返回給瀏覽器,Angular 客戶(hù)端應(yīng)用重新將數(shù)據(jù)渲染到視圖中。

我們可以通過(guò)創(chuàng)建 TransferState 服務(wù)來(lái)提高應(yīng)用程序的效率,該服務(wù)是在 Node.js 服務(wù)器和瀏覽器中呈現(xiàn)的應(yīng)用程序之間交換的一個(gè)鍵值注冊(cè)表。

我們將通過(guò)一個(gè) HTTP_INTERCEPTOR 機(jī)制來(lái)使用它,該機(jī)制將駐留在 HttpClient 服務(wù)中,并將操縱請(qǐng)求和響應(yīng)。

創(chuàng)建一個(gè)新的 class,實(shí)現(xiàn) HttpInterceptor 接口定義的 intercept 方法:

@Injectable({
 providedIn: 'root'
})
export class HttpInterceptorService implements HttpInterceptor
public intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>>

每當(dāng)對(duì) HttpClient 服務(wù)執(zhí)行任何 API 調(diào)用時(shí),都會(huì)調(diào)用此方法。

為了簡(jiǎn)單起見(jiàn),我們僅針對(duì) GET 方法啟用 TransferState:

if (request.method !== 'GET') {
     return next.handle(request);
   }

我們根據(jù) GET 請(qǐng)求的 URL 生成一個(gè)密鑰。 我們將使用鍵值對(duì)來(lái)存儲(chǔ)或檢索請(qǐng)求響應(yīng),具體取決于請(qǐng)求是在服務(wù)器端還是瀏覽器端處理:

const key: StateKey<string> = makeStateKey<string>(request.url);

為了區(qū)分服務(wù)器和瀏覽器運(yùn)行環(huán)境,我們使用@angular/common庫(kù)中的 isPlatformServer 方法以及 PLATFORM_ID 注入令牌:

 if (isPlatformServer(this.platformId)) {
       //serverSide
   } else {
       //browserSide
   }

當(dāng)服務(wù)器端渲染時(shí),我們將 API 結(jié)果寫(xiě)入 Transfer State 注冊(cè)表中:

 if (isPlatformServer(this.platformId)) {
    return next.handle(request).pipe(tap((event) => {
      this.transferState.set(key, (<HttpResponse<any>> event).body);
    }));

在瀏覽器端代碼中,我們要檢查給定 HTTP 請(qǐng)求的響應(yīng)是否已經(jīng)駐留在 Transfer State 注冊(cè)表中。 如果存在,我們直接從注冊(cè)表中取出值,并清除注冊(cè)表,以便將來(lái)的調(diào)用可以存儲(chǔ)新數(shù)據(jù),并將響應(yīng)返回給調(diào)用者。

當(dāng)且僅當(dāng)注冊(cè)表中不存在給定的鍵,我們才在客戶(hù)端環(huán)境下執(zhí)行 HTTP 調(diào)用。

  else {
    const storedResponse = this.transferState.get<any>(key, null);
    if (storedResponse) {
      const response = new HttpResponse({body: storedResponse, status: 200});
      this.transferState.remove(key);
      return of(response);
    } else {
      return next.handle(request);
    }
  }

到此這篇關(guān)于使用 Angular 服務(wù)器端渲染 Transfer State Service的文章就介紹到這了,更多相關(guān) Angular Transfer State Service內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • ?typeScript入門(mén)基礎(chǔ)介紹

    ?typeScript入門(mén)基礎(chǔ)介紹

    這篇文章主要介紹了?typeScript入門(mén)基礎(chǔ),TypeScript?是由微軟開(kāi)發(fā)的開(kāi)源、跨平臺(tái)的編程語(yǔ)言,是?javaScript?的超集,最終被編譯為?javaScript代碼。常常被簡(jiǎn)稱(chēng)為T(mén)S支持JS、ES語(yǔ)法,下文將繼續(xù)其他基礎(chǔ)介紹,需要的朋友可以參考一下
    2022-02-02
  • 一文詳解JavaScript中的事件循環(huán)(event?loop)機(jī)制

    一文詳解JavaScript中的事件循環(huán)(event?loop)機(jī)制

    JavaScript中的事件循環(huán)(Event?Loop)是一種重要的機(jī)制,用于管理異步代碼的執(zhí)行,它確保?JavaScript?單線(xiàn)程環(huán)境中的任務(wù)按照正確的順序執(zhí)行,同時(shí)允許異步操作如定時(shí)器、網(wǎng)絡(luò)請(qǐng)求和事件處理,本將給大家詳細(xì)的介紹一下JavaScript事件循環(huán)機(jī)制,感興趣的朋友可以參考下
    2023-12-12
  • JavaScript中的偏函數(shù)你理解了嗎

    JavaScript中的偏函數(shù)你理解了嗎

    JavaScript中的偏函數(shù)(Partial?Function)是指一個(gè)函數(shù),它是由另一個(gè)函數(shù)通過(guò)固定一些參數(shù)而得到的,從而產(chǎn)生了一個(gè)新的函數(shù),本文主要來(lái)和大家聊聊偏函數(shù)的原理與使用,希望對(duì)大家有所幫助
    2023-05-05
  • 基于aotu.js實(shí)現(xiàn)微信自動(dòng)添加通訊錄中的聯(lián)系人功能

    基于aotu.js實(shí)現(xiàn)微信自動(dòng)添加通訊錄中的聯(lián)系人功能

    這篇文章主要介紹了利用aotu.js實(shí)現(xiàn)微信自動(dòng)添加通訊錄中的聯(lián)系人,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-05-05
  • echart自適應(yīng)寬度的兩種方法實(shí)例

    echart自適應(yīng)寬度的兩種方法實(shí)例

    最近工作中element后臺(tái)管理使用Echarts圖表,在使用過(guò)程中也遇到了些問(wèn)題,下面這篇文章主要給大家介紹了關(guān)于echart自適應(yīng)寬度的兩種方法,需要的朋友可以參考下
    2022-12-12
  • javascript中一些數(shù)組常用的API總結(jié)

    javascript中一些數(shù)組常用的API總結(jié)

    Js中數(shù)組是一個(gè)重要的數(shù)據(jù)結(jié)構(gòu),它相比于字符串有更多的方法,本篇文章總結(jié)了一些數(shù)組中常用的API,我們把它們分成兩類(lèi),一類(lèi)是會(huì)改變?cè)紨?shù)組,一類(lèi)是不會(huì)改變?cè)紨?shù)組,感興趣的小伙伴可以學(xué)習(xí)一下
    2023-09-09
  • Bootstrap導(dǎo)航菜單點(diǎn)擊后無(wú)法自動(dòng)添加active的處理方法

    Bootstrap導(dǎo)航菜單點(diǎn)擊后無(wú)法自動(dòng)添加active的處理方法

    今天小編就為大家分享一篇Bootstrap導(dǎo)航菜單點(diǎn)擊后無(wú)法自動(dòng)添加active的處理方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-08-08
  • 原生js仿jquery animate動(dòng)畫(huà)效果

    原生js仿jquery animate動(dòng)畫(huà)效果

    這篇文章主要為大家詳細(xì)介紹了原生js仿jquery animate動(dòng)畫(huà)效果,具有一定的,感興趣的小伙伴們可以參考一下
    2016-07-07
  • javascript 上下banner替換具體實(shí)現(xiàn)

    javascript 上下banner替換具體實(shí)現(xiàn)

    這篇文章介紹了javascript 上下banner替換具體實(shí)現(xiàn),有需要的朋友可以參考一下
    2013-11-11
  • uni-app多環(huán)境配置實(shí)現(xiàn)自動(dòng)部署的方式詳解

    uni-app多環(huán)境配置實(shí)現(xiàn)自動(dòng)部署的方式詳解

    前后端分離開(kāi)發(fā)模式中,無(wú)論前后端都有可能區(qū)分不同的環(huán)境配置,下面這篇文章主要給大家介紹了關(guān)于uni-app多環(huán)境配置實(shí)現(xiàn)自動(dòng)部署的相關(guān)資料,需要的朋友可以參考下
    2022-06-06

最新評(píng)論

嘉祥县| 宁陕县| 四平市| 湛江市| 旌德县| 中宁县| 中山市| 东丰县| 名山县| 定日县| 彭泽县| 镇康县| 基隆市| 土默特右旗| 洪洞县| 东光县| 东乡县| 九龙县| 贡嘎县| 安仁县| 韶关市| 荔波县| 乐昌市| 盘锦市| 且末县| 精河县| 泸定县| 将乐县| 石台县| 兴海县| 揭东县| 江阴市| 甘谷县| 内黄县| 莫力| 贵定县| 泗洪县| 蛟河市| 松江区| 平昌县| 甘肃省|