#70772·angular

信号表: 允许自定义数组项的身份跟踪

作者: maayang7777创建于 2026年9月17日更新于 2026年9月17日
标签area: formsforms: signals

@ angular/ * 软件包与特性请求相关 ?

表单

说明

我想提议一个API,用于明确定义信号表格式在调和其FieldTree时如何识别数组中的项目.

目前,当形式模型中的数组被包含新对象引用的新数组所取代时,相应的字段可能不再正确关联. 特别是,使用带有模板@用于跟踪的项目的逻辑ID会导致孤域出错.

如果该模型被故意视为真理的来源,取而代之的是新鲜的物体——例如,在从服务器收到最新数据之后,就会产生问题。

考虑一个模型,比如:

[
{id: 1,取名:"爱丽丝"},
{id: 2,取名:"鲍勃"}
[ . ]

更新后可改为:

[
{id: 1, 名:"爱丽丝更新"},
{id: 2,取名:"鲍勃"}
[ . ]

尽管这些代表相同的逻辑实体,但对象引用是不同的.

Angular的@for已经有一种表达这种区别的方法:

@ for (项目 (); 轨道项目) {
. . . . . . . .
{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?

然而,这控制了DOM/视图调节. 我认为信号表 可以从类似的机制 调和 菲尔德特雷本身。

为什么这看起来有用 在Angular应用中,对象身份和逻辑实体身份已经存在区别.

例如,申请可例行收到:

更新 const = 等待寄存器.get 项目(;)
型号. set(已更新);

返回的对象可能是新的实例,尽管其身份代表着同样的实体。

在这种情况下,我期望形式模型继续成为真理的来源,而形式基础设施则决定现有哪些字段对应逻辑实体.

我不建议改变@for的轨道。 相反,这将在信号形式领域(FieldTree)一级提供相应的身份识别机制。

阵列跟踪和孤行领域已经存在相关问题,包括#66711和#66796. 这些讨论确定,FieldTree的身份目前是预定的模板跟踪机制。 这个建议具体涉及当源模型被新对象实例所取代时,信号形式本身是否能够支持一个单独的,明确的逻辑身份来调和数组项目FieldTrees.

建议的解决办法

大致如下:

窗体(模型,(路径)) {{
音轨By(路径项目,项目X];
应用每个(路径项目,项目 {{{
// 战地计划...
* ;
* ;

准确的API只是一个例子;重要的部分是能够为数组项提供稳定的逻辑特征.

预期的语义是,当数组改变时:

  • 同一密钥的项目被视为同一逻辑形式项目。
  • 其现有的FieldTree和相关状态可以被保留.
  • 新键创建了新字段。
  • 删除的密钥取出相应的字段。

这将允许应用程序使用不可改变 . . . . . . .

内容来源: angular/angular