[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"knowledge-\u002Fapi\u002Fknowledge\u002Fbooklet\u002Fframe\u002Fangular\u002Fbasics":3,"knowledge-related-\u002Fknowledge\u002Fbooklet\u002Fframe\u002Fangular\u002Fbasics":899,"knowledge-series-\u002Fknowledge\u002Fbooklet\u002Fframe\u002Fangular\u002Fbasics":920},{"source":4,"connector":5,"page":6},"sqlite","better-sqlite3",{"path":7,"title":8,"description":9,"category":10,"tags":11,"date":13,"pinned":14,"draft":14,"body":15,"seo":895,"stem":896,"id":897,"extension":898},"\u002Fknowledge\u002Fbooklet\u002Fframe\u002Fangular\u002Fbasics","Angular 基础","Angular 是由 Google 维护的、用于构建 Web 应用的 TypeScript 框架（含路由、HTTP、表单、依赖注入等）。当前文档以 Angular 17+ 为主线：独立组件（Standalone）、内置控制流（@if…","技能小册",[12],"angular","2020-03-07",false,{"type":16,"value":17,"toc":886},"minimark",[18,22,77,98,103,146,150,164,168,183,361,515,524,528,584,638,645,648,742,745,828,831,834,882],[19,20,8],"h1",{"id":21},"angular-基础",[23,24,25,32,33,37,38,41,42,45,46,49,50,54,55,58,59,62,63,45,67,45,72,76],"p",{},[26,27,31],"a",{"href":28,"rel":29},"https:\u002F\u002Fangular.dev\u002F",[30],"nofollow","Angular"," 是由 Google 维护的、用于构建 Web 应用的 ",[34,35,36],"strong",{},"TypeScript 框架","（含路由、HTTP、表单、依赖注入等）。当前文档以 ",[34,39,40],{},"Angular 17+"," 为主线：",[34,43,44],{},"独立组件（Standalone）","、",[34,47,48],{},"内置控制流","（",[51,52,53],"code",{},"@if"," \u002F ",[51,56,57],{},"@for","）、",[34,60,61],{},"Signals","。前置：",[26,64,66],{"href":65},"\u002Fknowledge\u002Fbooklet\u002Fweb\u002Fjs\u002Fbasics","JavaScript 基础",[26,68,71],{"href":69,"rel":70},"https:\u002F\u002Fwww.typescriptlang.org\u002Fdocs\u002F",[30],"TypeScript",[26,73,75],{"href":74},"\u002Fknowledge\u002Fbooklet\u002Fweb\u002Fhtml\u002Finfo","HTML","。",[23,78,79,80,45,84,88,89,92,93,97],{},"可与 ",[26,81,83],{"href":82},"\u002Fknowledge\u002Fbooklet\u002Fframe\u002Fvue\u002Fbasics","Vue 基础",[26,85,87],{"href":86},"\u002Fknowledge\u002Fbooklet\u002Fframe\u002Freact\u002Fbasics","React 基础"," 对照：Angular 是",[34,90,91],{},"开箱即用的全栈前端框架","，默认 TypeScript，变更检测与 ",[26,94,96],{"href":95},"\u002Fknowledge\u002Fbooklet\u002Fframe\u002Fangular\u002Fdi","依赖注入"," 为核心机制。",[99,100,102],"h2",{"id":101},"angular-是什么不是什么","Angular 是什么、不是什么",[104,105,106,118],"table",{},[107,108,109],"thead",{},[110,111,112,115],"tr",{},[113,114],"th",{},[113,116,117],{},"说明",[119,120,121,136],"tbody",{},[110,122,123,129],{},[124,125,126],"td",{},[34,127,128],{},"是",[124,130,131,132,135],{},"组件 + 模板；DI 管理服务；官方 CLI、Router、",[51,133,134],{},"HttpClient","、表单模块",[110,137,138,143],{},[124,139,140],{},[34,141,142],{},"不是",[124,144,145],{},"仅 UI 库（对比 React）；默认不用 JSX（使用 HTML 模板 + 指令）",[99,147,149],{"id":148},"与-angularjs1x的区别","与 AngularJS（1.x）的区别",[23,151,152,155,156,159,160,163],{},[34,153,154],{},"AngularJS（1.x）"," 与 ",[34,157,158],{},"Angular（2+）"," 是完全不同的框架，API 与架构不兼容。本文档中的「Angular」均指 ",[34,161,162],{},"Angular 2 及以后"," 的版本线。",[99,165,167],{"id":166},"独立组件与引导standalone","独立组件与引导（Standalone）",[23,169,170,171,174,175,178,179,182],{},"Angular 17 起，CLI 新建应用默认生成 ",[34,172,173],{},"standalone"," 组件（",[51,176,177],{},"standalone: true","），无需 ",[51,180,181],{},"NgModule"," 包裹根模块即可启动：",[184,185,190],"pre",{"className":186,"code":187,"language":188,"meta":189,"style":189},"language-ts shiki shiki-themes material-theme-lighter github-light github-dark","\u002F\u002F main.ts\nimport { bootstrapApplication } from \"@angular\u002Fplatform-browser\";\nimport { AppComponent } from \".\u002Fapp\u002Fapp.component\";\nimport { provideRouter } from \"@angular\u002Frouter\";\nimport { routes } from \".\u002Fapp\u002Fapp.routes\";\n\nbootstrapApplication(AppComponent, {\n  providers: [provideRouter(routes)],\n});\n","ts","",[51,191,192,201,236,259,282,305,312,328,350],{"__ignoreMap":189},[193,194,197],"span",{"class":195,"line":196},"line",1,[193,198,200],{"class":199},"sutJx","\u002F\u002F main.ts\n",[193,202,204,208,212,216,219,222,226,230,233],{"class":195,"line":203},2,[193,205,207],{"class":206},"sVHd0","import",[193,209,211],{"class":210},"sP7_E"," {",[193,213,215],{"class":214},"su5hD"," bootstrapApplication",[193,217,218],{"class":210}," }",[193,220,221],{"class":206}," from",[193,223,225],{"class":224},"sjJ54"," \"",[193,227,229],{"class":228},"s_sjI","@angular\u002Fplatform-browser",[193,231,232],{"class":224},"\"",[193,234,235],{"class":210},";\n",[193,237,239,241,243,246,248,250,252,255,257],{"class":195,"line":238},3,[193,240,207],{"class":206},[193,242,211],{"class":210},[193,244,245],{"class":214}," AppComponent",[193,247,218],{"class":210},[193,249,221],{"class":206},[193,251,225],{"class":224},[193,253,254],{"class":228},".\u002Fapp\u002Fapp.component",[193,256,232],{"class":224},[193,258,235],{"class":210},[193,260,262,264,266,269,271,273,275,278,280],{"class":195,"line":261},4,[193,263,207],{"class":206},[193,265,211],{"class":210},[193,267,268],{"class":214}," provideRouter",[193,270,218],{"class":210},[193,272,221],{"class":206},[193,274,225],{"class":224},[193,276,277],{"class":228},"@angular\u002Frouter",[193,279,232],{"class":224},[193,281,235],{"class":210},[193,283,285,287,289,292,294,296,298,301,303],{"class":195,"line":284},5,[193,286,207],{"class":206},[193,288,211],{"class":210},[193,290,291],{"class":214}," routes",[193,293,218],{"class":210},[193,295,221],{"class":206},[193,297,225],{"class":224},[193,299,300],{"class":228},".\u002Fapp\u002Fapp.routes",[193,302,232],{"class":224},[193,304,235],{"class":210},[193,306,308],{"class":195,"line":307},6,[193,309,311],{"emptyLinePlaceholder":310},true,"\n",[193,313,315,319,322,325],{"class":195,"line":314},7,[193,316,318],{"class":317},"sGLFI","bootstrapApplication",[193,320,321],{"class":214},"(AppComponent",[193,323,324],{"class":210},",",[193,326,327],{"class":210}," {\n",[193,329,331,335,338,341,344,347],{"class":195,"line":330},8,[193,332,334],{"class":333},"skxfh","  providers",[193,336,337],{"class":210},":",[193,339,340],{"class":214}," [",[193,342,343],{"class":317},"provideRouter",[193,345,346],{"class":214},"(routes)]",[193,348,349],{"class":210},",\n",[193,351,353,356,359],{"class":195,"line":352},9,[193,354,355],{"class":210},"}",[193,357,358],{"class":214},")",[193,360,235],{"class":210},[184,362,364],{"className":186,"code":363,"language":188,"meta":189,"style":189},"\u002F\u002F app.component.ts\nimport { Component } from \"@angular\u002Fcore\";\nimport { RouterOutlet } from \"@angular\u002Frouter\";\n\n@Component({\n  selector: \"app-root\",\n  standalone: true,\n  imports: [RouterOutlet],\n  template: `\u003Crouter-outlet \u002F>`,\n})\nexport class AppComponent {}\n",[51,365,366,371,393,414,418,432,448,461,473,491,499],{"__ignoreMap":189},[193,367,368],{"class":195,"line":196},[193,369,370],{"class":199},"\u002F\u002F app.component.ts\n",[193,372,373,375,377,380,382,384,386,389,391],{"class":195,"line":203},[193,374,207],{"class":206},[193,376,211],{"class":210},[193,378,379],{"class":214}," Component",[193,381,218],{"class":210},[193,383,221],{"class":206},[193,385,225],{"class":224},[193,387,388],{"class":228},"@angular\u002Fcore",[193,390,232],{"class":224},[193,392,235],{"class":210},[193,394,395,397,399,402,404,406,408,410,412],{"class":195,"line":238},[193,396,207],{"class":206},[193,398,211],{"class":210},[193,400,401],{"class":214}," RouterOutlet",[193,403,218],{"class":210},[193,405,221],{"class":206},[193,407,225],{"class":224},[193,409,277],{"class":228},[193,411,232],{"class":224},[193,413,235],{"class":210},[193,415,416],{"class":195,"line":261},[193,417,311],{"emptyLinePlaceholder":310},[193,419,420,423,426,429],{"class":195,"line":284},[193,421,422],{"class":210},"@",[193,424,425],{"class":317},"Component",[193,427,428],{"class":214},"(",[193,430,431],{"class":210},"{\n",[193,433,434,437,439,441,444,446],{"class":195,"line":307},[193,435,436],{"class":333},"  selector",[193,438,337],{"class":210},[193,440,225],{"class":224},[193,442,443],{"class":228},"app-root",[193,445,232],{"class":224},[193,447,349],{"class":210},[193,449,450,453,455,459],{"class":195,"line":314},[193,451,452],{"class":333},"  standalone",[193,454,337],{"class":210},[193,456,458],{"class":457},"syTEX"," true",[193,460,349],{"class":210},[193,462,463,466,468,471],{"class":195,"line":330},[193,464,465],{"class":333},"  imports",[193,467,337],{"class":210},[193,469,470],{"class":214}," [RouterOutlet]",[193,472,349],{"class":210},[193,474,475,478,480,483,486,489],{"class":195,"line":352},[193,476,477],{"class":333},"  template",[193,479,337],{"class":210},[193,481,482],{"class":224}," `",[193,484,485],{"class":228},"\u003Crouter-outlet \u002F>",[193,487,488],{"class":224},"`",[193,490,349],{"class":210},[193,492,494,496],{"class":195,"line":493},10,[193,495,355],{"class":210},[193,497,498],{"class":214},")\n",[193,500,502,505,509,512],{"class":195,"line":501},11,[193,503,504],{"class":206},"export",[193,506,508],{"class":507},"sbsja"," class",[193,510,245],{"class":511},"sbgvK",[193,513,514],{"class":210}," {}\n",[23,516,517,518,520,521,523],{},"既有 ",[34,519,181],{}," 项目仍可维护；新功能优先采用 Standalone + ",[51,522,207],{}," 在组件上声明依赖。",[99,525,527],{"id":526},"cli-速览","CLI 速览",[184,529,533],{"className":530,"code":531,"language":532,"meta":189,"style":189},"language-bash shiki shiki-themes material-theme-lighter github-light github-dark","npm install -g @angular\u002Fcli\nng new my-app --style=css --routing\ncd my-app && ng serve\n","bash",[51,534,535,550,567],{"__ignoreMap":189},[193,536,537,540,543,547],{"class":195,"line":196},[193,538,539],{"class":511},"npm",[193,541,542],{"class":228}," install",[193,544,546],{"class":545},"stzsN"," -g",[193,548,549],{"class":228}," @angular\u002Fcli\n",[193,551,552,555,558,561,564],{"class":195,"line":203},[193,553,554],{"class":511},"ng",[193,556,557],{"class":228}," new",[193,559,560],{"class":228}," my-app",[193,562,563],{"class":545}," --style=css",[193,565,566],{"class":545}," --routing\n",[193,568,569,573,575,578,581],{"class":195,"line":238},[193,570,572],{"class":571},"sptTA","cd",[193,574,560],{"class":228},[193,576,577],{"class":210}," &&",[193,579,580],{"class":511}," ng",[193,582,583],{"class":228}," serve\n",[104,585,586,596],{},[107,587,588],{},[110,589,590,593],{},[113,591,592],{},"命令",[113,594,595],{},"作用",[119,597,598,608,618,628],{},[110,599,600,605],{},[124,601,602],{},[51,603,604],{},"ng generate component foo",[124,606,607],{},"生成组件",[110,609,610,615],{},[124,611,612],{},[51,613,614],{},"ng generate service bar",[124,616,617],{},"生成服务",[110,619,620,625],{},[124,621,622],{},[51,623,624],{},"ng build",[124,626,627],{},"生产构建",[110,629,630,635],{},[124,631,632],{},[51,633,634],{},"ng test",[124,636,637],{},"单元测试（默认 Karma + Jasmine）",[23,639,640,641,76],{},"详见 ",[26,642,644],{"href":643},"\u002Fknowledge\u002Fbooklet\u002Fframe\u002Fangular\u002Fproject","工程化",[99,646,647],{"id":647},"核心概念速览",[104,649,650,659],{},[107,651,652],{},[110,653,654,657],{},[113,655,656],{},"概念",[113,658,117],{},[119,660,661,674,688,701,715,728],{},[110,662,663,668],{},[124,664,665],{},[34,666,667],{},"组件",[124,669,670,673],{},[51,671,672],{},"@Component","：类 + 模板 + 样式；通过 selector 挂载",[110,675,676,681],{},[124,677,678],{},[34,679,680],{},"模板",[124,682,683,684],{},"HTML + 绑定 + 指令；见 ",[26,685,687],{"href":686},"\u002Fknowledge\u002Fbooklet\u002Fframe\u002Fangular\u002Fcomponents","组件与模板",[110,689,690,694],{},[124,691,692],{},[34,693,96],{},[124,695,696,697,700],{},"在构造函数或 ",[51,698,699],{},"inject()"," 中获取服务实例",[110,702,703,708],{},[124,704,705],{},[34,706,707],{},"变更检测",[124,709,710,711],{},"默认由 Zone.js 等在异步任务后刷新视图；见 ",[26,712,714],{"href":713},"\u002Fknowledge\u002Fbooklet\u002Fframe\u002Fangular\u002Fperformance\u002Fchange-detection","performance",[110,716,717,722],{},[124,718,719],{},[34,720,721],{},"Signal",[124,723,724,725],{},"细粒度响应式原语（Angular 16+）；见 ",[26,726,61],{"href":727},"\u002Fknowledge\u002Fbooklet\u002Fframe\u002Fangular\u002Fsignals\u002Fbasics",[110,729,730,735],{},[124,731,732],{},[34,733,734],{},"RxJS",[124,736,737,738,741],{},"处理异步流（HTTP、事件流）；常与 ",[51,739,740],{},"async"," 管道配合",[99,743,744],{"id":744},"本目录学习路径",[104,746,747,757],{},[107,748,749],{},[110,750,751,754],{},[113,752,753],{},"主题",[113,755,756],{},"文档",[119,758,759,768,783,801,816],{},[110,760,761,763],{},[124,762,687],{},[124,764,765],{},[26,766,767],{"href":686},"components",[110,769,770,773],{},[124,771,772],{},"响应式",[124,774,775,778,779],{},[26,776,777],{"href":727},"signals\u002Fbasics"," → ",[26,780,782],{"href":781},"\u002Fknowledge\u002Fbooklet\u002Fframe\u002Fangular\u002Fsignals\u002Frxjs","rxjs",[110,784,785,788],{},[124,786,787],{},"DI \u002F 表单 \u002F HTTP",[124,789,790,45,793,45,797],{},[26,791,792],{"href":95},"di",[26,794,796],{"href":795},"\u002Fknowledge\u002Fbooklet\u002Fframe\u002Fangular\u002Fforms","forms",[26,798,800],{"href":799},"\u002Fknowledge\u002Fbooklet\u002Fframe\u002Fangular\u002Fhttp","http",[110,802,803,806],{},[124,804,805],{},"路由与状态",[124,807,808,45,812],{},[26,809,811],{"href":810},"\u002Fknowledge\u002Fbooklet\u002Fframe\u002Fangular\u002Frouter","router",[26,813,815],{"href":814},"\u002Fknowledge\u002Fbooklet\u002Fframe\u002Fangular\u002Fstate","state",[110,817,818,821],{},[124,819,820],{},"性能与工程",[124,822,823,45,825],{},[26,824,714],{"href":713},[26,826,827],{"href":643},"project",[99,829,830],{"id":830},"参考文献",[23,832,833],{},"以下链接在编写时均可正常访问：",[104,835,836,845],{},[107,837,838],{},[110,839,840,843],{},[113,841,842],{},"资料",[113,844,117],{},[119,846,847,858,870],{},[110,848,849,855],{},[124,850,851],{},[26,852,854],{"href":28,"rel":853},[30],"Angular 文档",[124,856,857],{},"英文官方",[110,859,860,867],{},[124,861,862],{},[26,863,866],{"href":864,"rel":865},"https:\u002F\u002Fangular.cn\u002F",[30],"Angular 中文文档",[124,868,869],{},"社区翻译，与版本同步以站点为准",[110,871,872,879],{},[124,873,874],{},[26,875,878],{"href":876,"rel":877},"https:\u002F\u002Fangular.dev\u002Fupdate-guide",[30],"Angular 更新指南",[124,880,881],{},"版本升级",[883,884,885],"style",{},"html pre.shiki code .sutJx, html code.shiki .sutJx{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#6A737D;--shiki-default-font-style:inherit;--shiki-dark:#6A737D;--shiki-dark-font-style:inherit}html pre.shiki code .sVHd0, html code.shiki .sVHd0{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#D73A49;--shiki-default-font-style:inherit;--shiki-dark:#F97583;--shiki-dark-font-style:inherit}html pre.shiki code .sP7_E, html code.shiki .sP7_E{--shiki-light:#39ADB5;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .su5hD, html code.shiki .su5hD{--shiki-light:#90A4AE;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sjJ54, html code.shiki .sjJ54{--shiki-light:#39ADB5;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .s_sjI, html code.shiki .s_sjI{--shiki-light:#91B859;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sGLFI, html code.shiki .sGLFI{--shiki-light:#6182B8;--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .skxfh, html code.shiki .skxfh{--shiki-light:#E53935;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .syTEX, html code.shiki .syTEX{--shiki-light:#FF5370;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sbsja, html code.shiki .sbsja{--shiki-light:#9C3EDA;--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sbgvK, html code.shiki .sbgvK{--shiki-light:#E2931D;--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .stzsN, html code.shiki .stzsN{--shiki-light:#91B859;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sptTA, html code.shiki .sptTA{--shiki-light:#6182B8;--shiki-default:#005CC5;--shiki-dark:#79B8FF}",{"title":189,"searchDepth":203,"depth":203,"links":887},[888,889,890,891,892,893,894],{"id":101,"depth":203,"text":102},{"id":148,"depth":203,"text":149},{"id":166,"depth":203,"text":167},{"id":526,"depth":203,"text":527},{"id":647,"depth":203,"text":647},{"id":744,"depth":203,"text":744},{"id":830,"depth":203,"text":830},{"title":8,"description":9},"knowledge\u002Fbooklet\u002Fframe\u002FAngular\u002Fbasics","knowledge\u002Fknowledge\u002Fbooklet\u002Fframe\u002FAngular\u002Fbasics.md","md",{"items":900},[901,905,908,911,914,917],{"path":902,"title":903,"description":904,"category":10,"score":307},"\u002Fknowledge\u002Fbooklet\u002Fframe\u002Fangular\u002Fecology","生态集成","Angular 官方维护路由、HTTP、表单、动画等；UI 与状态扩展由社区与官方 Material 团队提供。涵盖官方\u002F半官方库、常用第三方库、与 Vue\u002FReact 生态对照、选型建议与常见坑。",{"path":727,"title":906,"description":907,"category":10,"score":307},"Signal 基础","Signals 是 Angular 16 引入的响应式原语：可读写的 signal、派生的 computed、副作用 effect。用于组件内状态与跨组件细粒度更新，涵盖 API、input signal、与变更检测的关系、最佳实践与常见坑。",{"path":781,"title":909,"description":910,"category":10,"score":307},"RxJS 互操作","Angular 内置 RxJS 处理异步流（HTTP、HttpClient、路由事件、FormControl 的 valueChanges 等）。Signal 适合同步\u002F短链路状态；长生命周期流仍常用 Observable。涵盖 async 管道、toSignal\u002FtoObservable、常用操作符、最佳实践与常见坑。",{"path":795,"title":912,"description":913,"category":10,"score":307},"表单","Angular 提供 响应式表单（Reactive Forms） 与 模板驱动表单（Template-driven）。复杂表单推荐 Reactive Forms（模型在 TypeScript 中，易测试）。涵盖 FormGroup\u002FFormArray、Typed Forms、自定义校验器、最佳实践与常见坑。",{"path":814,"title":915,"description":916,"category":10,"score":307},"状态管理","Angular 没有强制单一状态库：服务 + DI、Signal、RxJS 即可覆盖多数场景；大型应用可选用 NgRx。涵盖选型、服务作为状态容器、跨组件共享、NgRx 与 SignalStore、常见坑。",{"path":799,"title":918,"description":919,"category":10,"score":307},"HTTP 与数据","Angular 通过 HttpClient（@angular\u002Fcommon\u002Fhttp）发起 HTTP 请求，返回 RxJS Observable。见 RxJS 互操作、依赖注入。",{"series":921,"title":12,"items":922,"index":955,"prev":956,"next":957},"booklet\u002Fframe\u002Fangular",[923,924,926,928,930,932,934,936,938,940,943,947,949,951],{"path":7,"title":8,"date":13,"pinned":14},{"path":727,"title":906,"date":925,"pinned":14},"2026-06-12",{"path":713,"title":707,"date":927,"pinned":14},"2023-10-12",{"path":686,"title":687,"date":929,"pinned":14},"2021-07-11",{"path":95,"title":96,"date":931,"pinned":14},"2021-01-24",{"path":902,"title":903,"date":933,"pinned":14},"2026-07-12",{"path":795,"title":912,"date":935,"pinned":14},"2025-05-26",{"path":799,"title":918,"date":937,"pinned":14},"2024-12-27",{"path":643,"title":644,"date":939,"pinned":14},"2021-09-01",{"path":810,"title":941,"date":942,"pinned":14},"路由","2023-02-04",{"path":944,"title":945,"date":946,"pinned":14},"\u002Fknowledge\u002Fbooklet\u002Fframe\u002Fangular\u002Fperformance\u002Fruntime","运行时优化","2022-11-01",{"path":781,"title":909,"date":948,"pinned":14},"2026-04-06",{"path":814,"title":915,"date":950,"pinned":14},"2025-04-29",{"path":952,"title":953,"date":954,"pinned":14},"\u002Fknowledge\u002Fbooklet\u002Fframe\u002Fangular\u002Ftest","测试","2021-08-25",0,null,{"path":727,"title":906,"date":925,"pinned":14}]