99国产精品欲av蜜臀,可以直接免费观看的AV网站,gogogo高清免费完整版,啊灬啊灬啊灬免费毛片

網易首頁 > 網易號 > 正文 申請入駐

Angular v20正式發布

0
分享至

本文轉載自:

過去幾年對 Angular 來說是變革的時期,我們推出了許多重大進展,如使用 Signals 的響應式編程和 Zoneless 應用的強大功能。

我們希望這些功能能幫助 Angular 社區構建下一代網絡應用程序,使其快速上市并具有強大的性能。


我們才剛剛開始!Angular v20 是我們最新發布的版本,我們花費了無數的時間打磨一些正在開發中的功能,為您提供堅如磐石的開發體驗。

亮點包括:

  • 穩定 API,如 effect 、 linkedSignaltoSignal 、增量水合、路由級渲染模式配置以及將 zoneless 提升至開發者預覽版

  • 通過 Angular DevTools 改進調試功能,并與 Chrome 合作,在 Chrome DevTools 中直接進行自定義 Angular 報告

  • 通過編碼風格指南更新、類型檢查和 HostBindings 的語言服務支持、模板中支持 untagged 模板字面量表達式、默認模板熱模塊替換等,提升開發者體驗。

  • GenAI 開發方面的進步,包括 llms.txt 和 angular.dev 指南和視頻,用于構建生成式 AI 應用。

  • 啟動對 Angular 官方吉祥物的評論請求。

將響應式特性提升至穩定版

過去三年,我們重新思考了 Angular 的反應性模型,使其更加健壯和面向未來。在 Angular v16 中,我們發布了 Angular Signals 的開發者預覽版,自那以后,它們在谷歌內外得到了廣泛采用。

YouTube 在舞臺上分享了如何利用 Angular Signals 和 Wiz 將Living Room的輸入延遲改善了 35%。與此同時,TC39 啟動了一項調查,通過基于 Angular Signals 的參考實現,將 Signals 引入 JavaScript 語言。

在收集了 RFC 反饋并迭代實現后,我們將 signalcomputed、input 和 view queries API 推升至穩定版本。今天,我們宣布 effect、linkedSignaltoSignal 也成為穩定版本。

新的實驗性 API

為了解決使用 Angular 管理異步狀態的問題,在 v19 中我們開發了 resource API。自那以后,我們引入了資源流,并創建了一個名為 httpResource 的新 API,它允許你使用基于 Signal 的響應式 API 發起 HTTP 請求。這兩個 API 都作為 v20 的一部分提供實驗性支持。

resource API 允許你在 Signal 變化時發起異步操作,并將該操作的結果作為 Signal 暴露出去:

const userId: Signal
             
 = getUserId(); const userResource = resource({   params: () => ({id: userId()}),   loader: ({request, abortSignal}): Promise => {     // 當給定的 `AbortSignal` 指示請求已中止時,     // fetch 會取消任何未完成的 HTTP 請求。     return fetch(`users/${request.id}`, {signal: abortSignal});   }, });
      

上面的代碼將在 userId signal 變化時獲取具有特定標識符的用戶。

現在假設我們從 WebSocket 獲取數據。為此,我們可以使用流式資源:

@Component({   template: `{{ dataStream.value() }}` }) export class App {   // WebSocket 初始化邏輯將在此處執行……   // ...   // 流媒體資源的初始化   dataStream = resource({     stream: () => {       return new Promise string []>>> ((resolve) => {         const resourceResult = signal<{ value: string[] }>({           value: [],         });         this.socket.onmessage = event => {           resourceResult.update(current => ({              value: [...current.value, event.data]           });         };         resolve(resourceResult);       });     },   }); }

在這個最小示例中,我們聲明了一個新的流式 resource,它返回一個 Signal 的 Promise。該 signal 的值類型為 ResourceStreamItem ,這意味著如果我們想返回錯誤,signal 可以持有 { value: string[] }{error: … } 的值。

我們通過 resourceResult Signal 發出從 WebSocket 接收到的值。

基于這一模式,我們還發布了實驗性功能 httpResource

@Component({   template: `{{ userResource.value() | json }}` }) class UserProfile {   userId = signal(1);   userResource = httpResource (() =>      `https://example.com/v1/users/${this.userId()}`   }); }

上述代碼片段會在 userId 變化時,向我們指定的 URL 發送 HTTP GET 請求。 httpResource 返回 HttpResourceRef,它具有一個類型為 signal 的 value 屬性,我們可以在模板中直接訪問。 userResource 還包含其他值,例如 isLoadingheaders 等。

在底層,httpResource 使用 HttpClient,因此你可以在 HttpClient provider 中指定攔截器:

bootstrapApplication(AppComponent, {providers: [   provideHttpClient(     withInterceptors([loggingInterceptor, cachingInterceptor]),   ) ]});
將 Zoneless 提升至開發者預覽版

在過去六個月里,我們在 zoneless 的方面取得了很大進展,特別是在服務器端渲染和錯誤處理方面。

許多開發人員甚至在不知不覺中使用 Zone.js 來捕捉應用程序中的錯誤。Zone.js 還能讓框架知道我們何時準備好將服務器端渲染的應用程序刷新到客戶端。

在 Zoneless 的世界里,我們必須為這些問題找到可靠的解決方案。

在 v20 中,我們現在在 Node.js 的 SSR 期間為 unhandledRejectionuncaughtException提供了默認處理器,以防止在出現錯誤時 Node 服務器崩潰。

在客戶端,你可以在你的 providers 中包含 provideBrowserGlobalErrorListeners。你可以通過更新你的 providers 來開始使用 zoneless:

bootstrapApplication(AppComponent, {providers: [   provideZonelessChangeDetection(),   provideBrowserGlobalErrorListeners() ]});

此外,請確保從你的 angular.json 中移除 zone.js 依賴。了解更多關于 zoneless 的優勢以及如何遷移你的項目,請參閱我們的文檔。

如果你正在創建一個新的 Angular 項目,可以使用 CLI 從一開始就將其設置為 zoneless:


在服務器上鞏固 Angular

在 v20 版本中,我們還專注于優化我們的旗艦服務器端渲染功能 —— 增量水合和路由級渲染模式配置。今天,我們很高興地將兩者都提升至穩定版本!

提醒一下,增量水合通過在特定觸發條件下下載并水合頁面的一部分,從而讓你的應用運行更快。

這樣,您的用戶無需下載特定頁面的所有 JavaScript,而是可以逐步下載他們需要的部分。

要開始使用增量水合,請通過指定 withIncrementalHydration 來配置水合:

import { provideClientHydration, withIncrementalHydration } from '@angular/platform-browser'; // ... provideClientHydration(withIncrementalHydration());

現在,在您的組件模板中,您可以使用可延遲視圖:

@defer (hydrate on viewport) {   
       }

這樣,Angular 將下載購物車組件及其傳遞依賴項,并在該部分 UI 進入視口時才進行水合。

此外,現在您可以使用路由級別的渲染模式配置作為穩定的 API!如果您的應用中不同路由有不同的渲染需求,您可以在服務器路由配置中進行設置:

export const routeConfig: ServerRoute = [   { path: '/login', mode: RenderMode.Server },   { path: '/dashboard', mode: RenderMode.Client },   {     path: '/product/:id',     mode: RenderMode.Prerender,     async getPrerenderParams() {       const dataService = inject(ProductService);       const ids = await dataService.getIds(); // ["1", "2", "3"]       // 在路由路徑中,使用 `id` 代替 `:id`。       return ids.map(id => ({ id }));     }   } ];

在上述代碼片段中,我們配置了在服務器上渲染登錄頁面,在客戶端渲染儀表板頁面,并預渲染產品頁面。

請注意,產品頁面需要一個 id 參數。為了解析每個產品的標識符,我們可以使用異步函數 getPrerenderParams。它返回一個對象,其中的鍵映射到路由參數。對于 /product/:id 頁面,我們返回一個具有 id 屬性的對象。

您可以將服務器端渲染的應用程序托管在大多數云服務提供商上。我們與 Firebase App Hosting 緊密合作,提供無縫的部署體驗,支持混合渲染(SSR、SSG 和 CSR),并提供 Google Cloud 的安全性和可擴展性。

優化開發者體驗

我們在開發 v20 的過程中投入了大量時間,致力于工程卓越性 —— 完善現有 API 以提升開發者體驗。我們全面進行了這項工作 —— 框架、路由器、表單、HTTP 等。讓我在這里分享更多我們在此處所做的工作!

Chrome DevTools 中的性能洞察

為了進一步增強開發者體驗,并深入了解應用程序性能,我們與 Chrome DevTools 團隊合作,將 Angular 特定的分析數據直接集成到性能面板中。

此前,開發者經常需要在框架特定的分析器和瀏覽器 DevTools 之間切換,這使得關聯信息并定位瓶頸變得具有挑戰性,尤其是在處理壓縮的生產代碼時。

這項新集成旨在通過在與其他瀏覽器性能指標相同的時序軸上顯示 Angular 運行時數據(如組件渲染、變更檢測周期和事件監聽器執行)來解決這個問題。

這項直接集成從 Angular v20 開始提供,利用了性能面板擴展性 API,特別是使用 console.timeStamp API 以其低開銷,確保分析不會對應用程序性能產生負面影響。

開發者現在可以更深入地了解 Angular 的內部運作,通過彩色編碼的條目來區分開發者編寫的 TypeScript 代碼和 Angular 編譯器生成的代碼。要啟用此功能,只需在應用程序中或 DevTools 控制臺中運行全局工具 ng.enableProfiling()。這一進步提供了更直觀和全面的性能分析體驗,使開發者能夠構建性能更優的 Angular 應用程序。


在上面的截圖中,你可以看到這項功能的效果。注意在性能時序軸的底部有一個專門用于 Angular 的軌道。

通過彩色條形圖,你可以預覽組件實例化、運行變更檢測等。Angular DevTools 和 Chrome 性能時間線中的 Angular 跟蹤都使用相同的鉤子,不同之處在于 Chrome 的性能時間線可以將你的應用生命周期置于框架外部的其他 JavaScript 調用上下文中。

此外,Chrome 性能時間線中的 Angular 跟蹤顯示了一些目前在 Angular DevTools 中不存在的數據,例如組件和提供者的實例化。

框架的添加和改進

要動態創建一個 Angular 組件,你可以使用 createComponent 函數。在 v20 中,我們引入了新功能,允許你將指令應用于動態創建的組件并指定綁定:

import {createComponent, signal, inputBinding, outputBinding} from'@angular/core'; const canClose = signal(false); const title = signal('My dialog title'); // 創建 MyDialog createComponent(MyDialog, {   bindings: [     // 綁定一個 signal 到 `canClose` 輸入     inputBinding('canClose', canClose),     // 專門監聽 MyDialog 上的 `onClose` 事件。     outputBinding ( 'onClose', result =>console.log(result)),         // 在 title 屬性上創建雙向綁定     twoWayBinding('title', title),   ],   directives: [     // 將 `FocusTrap` 指令應用于 `MyDialog`,無需任何綁定。     FocusTrap,     // 將 `HasColor` 指令應用于 `MyDialog` 并將 `red` 值綁定到其 `color` 輸入。     // 每次檢測到變化時都會調用 `inputBinding` 的回調。     {       type: HasColor,       bindings: [inputBinding('color', () =>'red')]     }   ] });

我們在上面創建了一個對話框組件,并指定:

  • canClose 輸入綁定,將 canClose signal 作為值傳遞

  • 將輸出 onClose 設置為回調函數,該函數記錄發出的結果

  • title 屬性與 title signal 之間的雙向綁定

此外,我們向組件中添加了 FocusTrapHasColor 指令。請注意,我們還可以為應用于 MyDialogHasColor 指令指定輸入綁定。

擴展模板表達式語法

我們一直在彌合 Angular 模板表達式與完整 JavaScript 語法之間的差距,以實現更高的表達能力和更好的開發者體驗。今天,我們引入了對冪運算符 **in 運算符的支持:

{{ n ** 2 }} {{ name in person }}

在 v20 中,我們還允許您直接在表達式中使用 untagged 的模板字面量:

             
 div>
      
擴展診斷

為了防止常見錯誤,我們引入了靜態檢查,用于檢測無效的空值合并、檢測結構化指令的缺失導入,并在您未調用傳遞給 @fortrack 函數時發出警告:

@Component({   template: `     @for (user of users; track trackFn) {      

特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相關推薦
熱點推薦
外資藥企大批退出中國,真的是咱們贏了嗎?大謬!

外資藥企大批退出中國,真的是咱們贏了嗎?大謬!

未央看點
2025-06-24 01:32:07
太實誠了!38歲劉亦菲不化妝無美顏純素顏出鏡,氣血充足,真美啊

太實誠了!38歲劉亦菲不化妝無美顏純素顏出鏡,氣血充足,真美啊

清游說娛
2025-06-24 17:47:37
北京天氣“反轉”了!未來這幾天有雨——

北京天氣“反轉”了!未來這幾天有雨——

BRTV新聞
2025-06-25 14:33:53
以伊十二日戰爭結束, 伊朗成最大贏家?。?!

以伊十二日戰爭結束, 伊朗成最大贏家!?。?/a>

山河路口
2025-06-25 12:47:16
社保繳納出事了!稅局終于對社保出手了,這7種行為查到必罰!

社保繳納出事了!稅局終于對社保出手了,這7種行為查到必罰!

稅海拾真
2025-06-25 09:42:30
東北龍鳳胎兄妹高考,妹妹710,哥哥680,媽媽教育方式值得學習

東北龍鳳胎兄妹高考,妹妹710,哥哥680,媽媽教育方式值得學習

星光看娛樂
2025-06-25 13:20:52
女喂養員海洋館失蹤,不久鯊魚因病手術,獸醫開刀后發現異常

女喂養員海洋館失蹤,不久鯊魚因病手術,獸醫開刀后發現異常

懸案解密檔案
2025-06-21 09:33:54
首發10+15,李月汝征服美媒!全英語流利采訪,打臉歧視她的教練

首發10+15,李月汝征服美媒!全英語流利采訪,打臉歧視她的教練

嘴炮體壇
2025-06-25 10:54:31
2-0!2-1!溫網第2天,中國金花2人同時晉級,36歲老將接近創歷史

2-0!2-1!溫網第2天,中國金花2人同時晉級,36歲老將接近創歷史

侃球熊弟
2025-06-24 22:38:56
世界首富馬斯克語出驚人!他直言:“外界一直低估中國!”

世界首富馬斯克語出驚人!他直言:“外界一直低估中國!”

荊楚寰宇文樞
2025-06-24 23:52:04
李夢宣布不再參加比賽,女籃主帥宮魯鳴回應歡迎其回歸!

李夢宣布不再參加比賽,女籃主帥宮魯鳴回應歡迎其回歸!

杜蘭特
2025-06-25 10:36:04
總理府已被圍,佩通坦拒絕辭職,軍方態度堅決,陸軍司令作出決定

總理府已被圍,佩通坦拒絕辭職,軍方態度堅決,陸軍司令作出決定

博覽歷史
2025-06-23 17:12:51
國務院辦公廳關于進一步規范和提升12345熱線服務的意見

國務院辦公廳關于進一步規范和提升12345熱線服務的意見

新京報
2025-06-25 17:18:45
比亞迪經銷商會議重大決定:精簡SKU、庫存熔斷、返利666元/輛

比亞迪經銷商會議重大決定:精簡SKU、庫存熔斷、返利666元/輛

車市紅點
2025-06-24 15:41:51
65歲老頭包養26歲女孩以干爹干女兒互稱,最后一次上床被女孩掐死

65歲老頭包養26歲女孩以干爹干女兒互稱,最后一次上床被女孩掐死

胖胖侃咖
2025-06-23 08:00:07
俄空軍司令科貝拉乘直升機視察前線被烏軍擊落,當場喪生

俄空軍司令科貝拉乘直升機視察前線被烏軍擊落,當場喪生

環球熱點快評
2025-06-24 09:03:00
斯諾克冷門不斷!2大世界冠軍翻車,囧哥轟5-0,中國13人進正賽!

斯諾克冷門不斷!2大世界冠軍翻車,囧哥轟5-0,中國13人進正賽!

劉姚堯的文字城堡
2025-06-25 08:50:58
國家出手!大批醫院將退出醫保

國家出手!大批醫院將退出醫保

賽柏藍
2025-06-25 20:29:49
全國城管機構大撤銷!百萬城管咋辦?六個方案能解決重就業問題?

全國城管機構大撤銷!百萬城管咋辦?六個方案能解決重就業問題?

說宇宙
2025-06-22 11:20:03
失傳已久的手診口訣找到了,趕緊收藏

失傳已久的手診口訣找到了,趕緊收藏

鄉村白大褂之家
2025-06-24 20:52:56
2025-06-25 21:23:00
開源中國 incentive-icons
開源中國
每天為開發者推送最新技術資訊
7149文章數 34424關注度
往期回顧 全部

科技要聞

小米YU7已下線500輛展車 26日前運往全國

頭條要聞

與汪峰節目牽手引猜測 寧靜談擇偶標準:他不是我的菜

頭條要聞

與汪峰節目牽手引猜測 寧靜談擇偶標準:他不是我的菜

體育要聞

山西太原大媽,在NBA闖出一片天

娛樂要聞

向佐接機郭碧婷,全程無交流像陌生人

財經要聞

免除蘇寧易購5億債務的神秘人是誰?

汽車要聞

售14.99萬/限量200臺 別克昂科威S新增丹霞紅內飾

態度原創

游戲
時尚
本地
旅游
親子

《死亡擱淺2》引擎封神?玩家盛贊開放世界表現!

挑對耳環=開掛!這15款巨in巨高級,太顯臉小了!

本地新聞

被貴妃帶火的“唐代頂流”,如今怎么不火了

旅游要聞

熱聞|清明假期將至,熱門目的地有哪些?

親子要聞

終于見面啦?。。。≡瓌揹y:@辣炒年糕

無障礙瀏覽 進入關懷版 主站蜘蛛池模板: 丹巴县| 安丘市| 灌阳县| 墨脱县| 五指山市| 钦州市| 邯郸市| 卢氏县| 门源| 肃南| 广东省| 锡林郭勒盟| 嵊州市| 扎鲁特旗| 邵武市| 会宁县| 汉源县| 郧西县| 余干县| 巴中市| 密山市| 博乐市| 南皮县| 黑龙江省| 吉安市| 合肥市| 宿州市| 新和县| 九龙坡区| 二连浩特市| 当涂县| 江城| 湾仔区| 梧州市| 独山县| 临清市| 沁阳市| 宿松县| 鲁甸县| 赤水市| 缙云县|