老夫年轻之时,闯荡江湖,见过两种人。一种,马步扎得稳,拳法也正,但一到实战就手忙脚乱。另一种,看似其貌不扬,却总能在关键时刻,用一两招「奇招」或「损招」一击制胜。

这后者,就是懂「术」的人。

在 Angular 的武林中,若「道」是内功心法,「法」是基础招式,那「术」就是这些从无数次真实战斗中淬炼出来的、能让你克敌制胜的「杀招」。它们不一定是最高深的理论,但一定是最管用的。今天,雪狼就传你几招压箱底的绝技。

第一类「术」:高效开发之「杀招」 —— 快、准、狠#

天下武功,唯快不破。写代码,同样追求效率。

杀招一:新式控制流,出招更简洁#

忘掉 *ngIf*ngForCommonModule 那些陈年旧事吧。Angular v17 带来的新式内置控制流,就是一套更快、更准的连招。

@if (user$ | async; as user) {
<h2>欢迎, {{ user.name }}!</h2>
} @else {
<p>请登录...</p>
}
<ul>
    @for (item of items; track item.id) {
    <li>{{ item.name }}</li>
    } @empty {
    <li>暂无数据</li>
    }
</ul>

这套招式妙就妙在,它让你出招时几乎没有前摇(无需导入CommonModule),招式本身(@if/@else)也比过去的各种 ng-template 障眼法清晰得多。更狠的是,@for 这一招自带「锁定」效果(强制 track),逼着你避开常见的性能陷阱。

文生图:一个对比图,左边是杂乱的*ngIf, ng-template, else等代码块,像一团乱麻。右边是清晰的@if/@else块状代码,像整齐的积木。风格:信息图表。

杀招二:async 管道,自带「金钟罩」#

此「术」虽老,但威力不减,堪称响应式防守的「终极奥义」。只要你用 async 管道来处理 Observable,就等于给自己套上了一层「金钟罩」。它自动帮你完成了订阅、解包、刷新、销毁的全套动作,让你百毒不侵,从根源上杜绝了内存泄漏这个最大、最隐蔽的内伤。

第二类「术」:性能优化之「杀招」 —— 静、准、懒#

高明的刺客,从不浪费一丝体力。他们追求一击毙命,讲究「静、准、懒」。优化性能,也是这个道理。

杀招一:OnPush vs. Signals,新旧「倚天剑」#

过去,OnPush 变更检测策略是我们的「倚天剑」,它让组件变得「懒」,只有在输入属性(@Input)引用变化时才被唤醒,大大减少了计算量。

如今,我们有了更快的剑 —— Signals

  • OnPush 适用于「听令行事」 的木偶组件,是一种粗粒度的「懒」。

  • Signals 则让组件拥有了「自主反应」 能力,当它依赖的某个 signal 变化时,只有视图中那一小块「神经末梢」会「动」,是一种细粒度的「懒」,懒到了极致,也快到了极致。

在新组件中,优先用 Signals 是不二之选。而已有的 OnPush 组件也无需抛弃,双剑合璧,亦是正解。

杀招二:@fortrack,练就「火眼金睛」#

新版 @for 强制使用 track,看似是给你戴上了「镣铐」,实则是逼你练就一双「火眼金睛」。它强迫你为列表中的每一项都打上独一无二的「烙印」(如 item.id),这样 Angular 在更新列表时,就能一眼看穿哪些是新人,哪些是旧识,哪些只是换了个位置,从而能以最高效的方式完成渲染,而不是傻傻地推倒重来。

第三类「术」:代码管理之「杀招」 —— 整、洁、明#

再强的杀招,如果用得乱七八糟,也会反噬自身。管理代码的「术」,关乎你的门派能否发扬光大。

杀招一:「智愚组件」,永恒的「君臣之道」#

这个「术」,无论江湖如何变化,都是构建大型门派的「帝王之术」。将你的组件分为「君」与「臣」,是让代码保持清晰的无上心法。

  • 智能组件(君):负责运筹帷幄。它们与外界(服务)沟通,管理状态,思考「做什么」。

  • 木偶组件(臣):负责执行命令。它们只通过 @Input 接收指令,通过 @Output 汇报成果,思考「怎么做」。它们是可复用的、忠诚的「工匠」。

「君」,精于谋略;「臣」,精于技艺。各司其职,门派焉能不兴?

文生图:一个“国王”组件(智能组件)正在发号施令,他头戴皇冠,身上有@Inject等标志。他面前站着一排一模一样的“工匠”组件(木偶组件),“工匠”们只通过固定的管道(Input/Output)接收指令和交付成果。风格:卡通人物、概念插画。

结语:躬行,方为大师#

今日所传之「术」,皆是从尸山血海的真实项目中摸爬滚打出来的实战技巧。但切记,「术」是活的,需与「道」和「法」结合,方能发挥最大威力。

南宋大诗人陆游曾教导他的儿子:

纸上得来终觉浅,绝知此事要躬行。

(从书本上学来的知识终究是肤浅的,要想真正明白其中的奥秘,就必须亲身去实践。)

现在,合上这本「秘籍」,去你的代码江湖里,把这些「杀招」一招一式地操练起来吧!当你能随心所欲地使出这些「术」时,你离「一代宗师」也就不远了。