You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Angular 12 HTML中如何通过点路径绑定JSON对应的字段?

Angular 12 点路径字符串双向绑定字段解决方案

问题根因

data[field]会将完整的address.city字符串当做单层属性名读取,你的data对象下不存在名为address.city的顶级属性,因此返回undefined。

实现方案

方案1:轻量工具函数实现(推荐,无额外封装成本)

在组件类中新增按点路径存取值的两个工具方法:

@Component({
  // 你的组件原有配置
})
export class YourComponent {
  data: any = { name: 'x1', address: { city: 'xyz' } };
  field: string = 'address.city';

  // 按点路径取值
  private getByPath(obj: any, path: string): any {
    return path.split('.').reduce((current, key) => current?.[key], obj);
  }

  // 按点路径赋值
  private setByPath(obj: any, path: string, value: any): void {
    const keyArr = path.split('.');
    const finalKey = keyArr.pop()!;
    // 定位到最后一级属性的父对象
    const parentObj = keyArr.reduce((current, key) => current[key], obj);
    parentObj[finalKey] = value;
  }
}

模板中将双向绑定拆分为输入绑定和变更事件绑定即可:

<input 
  [ngModel]="getByPath(data, field)" 
  (ngModelChange)="setByPath(data, field, $event)"
/>

方案2:全局复用封装

如果项目中大量存在该场景,可以将存取逻辑封装为自定义指令,使用时直接传入路径即可,示例用法如下:

<input [(ngModelPath)]="{target: data, path: field}" />

注意事项

可以在getByPath、setByPath中增加非法路径的校验逻辑,避免中间层级属性不存在时抛出运行时错误。

内容的提问来源于stack exchange,提问作者Settu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 00:45:01