【问题标题】:Convert value to string object for property binding将值转换为字符串对象以进行属性绑定
【发布时间】:2019-11-06 13:25:56
【问题描述】:

我有一个动态创建表单的组件,所以我从服务器获取所有元数据,并且我的模板中有一个 ngFor 来创建我的字段。这些属性都是与来自服务器的数据的结果绑定的。在其中一个中,我有以下情况: 如果像这样的硬代码
[filterParams]="{state:model.state_field}"
当我调用服务时,我可以将此 filterParams 用作对象并通过 http 请求发送,但我使用来自服务器的元数据我实际上像这样编写代码
[filterParams]="metadata.filterParams"
在 metadata.filterParams 中我有字符串“{state:model.state}”,但“state”的值不能是字符串,因为我使用的是模型值。

如何将来自元数据的字符串转换为从模型中获取值的对象,就像硬编码时的工作方式一样?

【问题讨论】:

  • console.log(metadata) 并显示输出
  • 我改了名字来问这个问题,但是在 metadata.filterParams 我有值 metadata.filterParams: "{state:model.state_field}" 我也更新了这个问题。
  • 引号内? ""?
  • 是的,因为它来自一个 json 返回。我试图以 json 对象的形式返回,但是当我意识到 [filterParams]"{state:model.state_field}" 中的硬编码使过滤器工作时,我将返回更改为字符串。

标签: angular property-binding


【解决方案1】:

您需要将metadata.filterParams: "{state:model.state_field}" 转换为 metadata.filterParams: {state:model.state_field}

所以试试这样:

 yourFunction() {
    let model = {
      state_field: 1
    };
    var eventstring = this.metadata.filterParams.replace(/"/g, "");
    this.metadata.filterParams = eval(eventstring)
    console.log(this.metadata);
  }

Working Demo

根据您的评论:当我意识到在 [filterParams] 中使用“{state:model.state_field}”进行硬编码时

这里:[filterParams]="{state:model.state_field}"

"" 不是字符串,引号只是用来绑定对象{state:model.state_field}

【讨论】:

  • 这不是我想要做的。我真的需要使[filterParams] 具有从元数据接收的值的值"{state : model.state_field}"(带双引号),因为对我的端点的每个请求都会从模型中获取 state_field 的值并将转换为查询字符串像state=NYstate=FL 如果改变状态。我正在使用一个为我创建字段的框架,所以我需要以这种方式传递过滤器的值。
  • @Adrita 在你的例子中,在最后一个 console.log() 之后,如果你这样做 model.state_field = 2; console.log(this.metadata); 值仍然是 1
  • 是的,这很明显,因为在此之前已经对字符串进行了评估
  • 我正在使用名为 Portinari UI (link) 的库,我的问题与名为查找的组件有关。即使我可以看到他们的源代码,我也不知道要通过过滤器表达式。
猜你喜欢
  • 2012-10-19
  • 2012-01-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-17
  • 1970-01-01
  • 2022-01-27
相关资源
最近更新 更多