【问题标题】:how can I get the name of property, to which [(ngModel)] is binded? Angular6如何获取 [(ngModel)] 绑定的属性名称?角 6
【发布时间】:2019-01-10 03:57:43
【问题描述】:

我有以下自定义组件

<form-text
    [(ngModel)]="dataItem.prop1">
  </form-text>

在这种情况下如何从类“prop1”中获取属性名称?

  @Component({
  selector: 'form-text',
  template: `
    <div>
      <label *ngIf="label" [attr.for]="identifier">{{label}}</label>
      <input
        type="text"
        [(ngModel)]="value"
      />
    </div>
  `,
  providers: [{
    provide: NG_VALUE_ACCESSOR,
    useExisting: FormTextComponent,
    multi: true,
   }],
  })
export class FormTextComponent extends ElementBase<string>{

    @ViewChild(NgModel) model: NgModel;

    constructor(@Optional() @Inject(NG_VALIDATORS) validators: Array<any>){
       super(validators);
    }

}

angular 不知何故知道它应该更新哪个属性。 我想获取此属性的引用或名称。 谢谢

【问题讨论】:

  • 也许它隐藏在元数据属性中? ???????????????谁知道...
  • 这是一个很好的问题,我也想做同样的事情,这可以让我自动应用道具名称作为输入名称值,从而简化更通用的组件。如果我遇到答案,我会更新!
  • 感谢@Jessycormier,如果您这样做,我将非常感激
  • 到目前为止,我采用的解决方案类似于建议的答案,在我的组件上创建一个 @Input() name;(在我的情况下,我将它放在我的 ElementBase 中,因为我正在扩展我的组件的公共部分的基类)。我不确定是否有手动获取属性名称的方法,因为您绑定的是属性值而不是对象,因此这里没有原型或反向查找功能。如果我在我的角度冒险中遇到了什么,我一定会传递信息!祝你好运。
  • 谢谢@Jessycormier。我认为这个名称可能隐藏在某个反射元数据中,因为 Angular 大量使用反射元数据库,也许它也将它存储在某个地方,谁知道......无论如何,这很难找到和/或调试。跨度>

标签: angular reflection reflect-metadata


【解决方案1】:
You can pass an @input property 'propname' with value as string.

<form-text
    required
    hexadecimal
    [dataV]="data"
    placeholder="Enter a hexadecimal value"
    label="Value 1"
    #prop1=ngModel
    [(ngModel)]="dataItem.prop1"
    propname="'prop1'"
    >
  </form-text>

In FormTextComponent,

@input() propname: string;
@ViewChild('prop1') propmodel: ngModel;

console.log(this.propname); // prop1
console.log(this.propmodel);

【讨论】:

  • 谢谢,但我想避免这种情况。 :) 角度知道要更新哪个属性,所以我也想获取这些数据
猜你喜欢
  • 2017-09-06
  • 1970-01-01
  • 2019-05-18
  • 1970-01-01
  • 1970-01-01
  • 2011-09-01
  • 2012-01-09
  • 1970-01-01
  • 2010-10-14
相关资源
最近更新 更多