首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有没有办法将json键作为字符串@ way ()以角形式传递

有没有办法将json键作为字符串@ way ()以角形式传递
EN

Stack Overflow用户
提问于 2019-11-15 18:21:34
回答 3查看 188关注 0票数 1

我试图使用角材料自动完成来创建自定义组件,这样我可以在代码中的任何地方使用它,因为我传递的是动态数组,对于每个数组,有不同的键被卡在一个点上。

我试过的是

app.component.html

代码语言:javascript
复制
<app-autocomplete [items]="data.attributes" [field]="'caption.default'" inputType="text" inputPlaceholder="placeholder"></app-autocomplete>

autocomplete.component.ts

代码语言:javascript
复制
var str1="";   
     var length= this.field.split(".");
     str1= "'"+length[0]+"']";
     console.log(length.length)
    for(var i=1;i<length.length;i++){

      if(i===length.length-1){
        str1= str1+"['"+length[i];
      }else{
        str1= str1+"['"+length[i]+"']";
      }

    }

    this.field=str1;
     console.log(this.field);

所以它会把abc还给我

autocomplete.component.html

代码语言:javascript
复制
<mat-form-field class="example-full-width">
    <input type="{{inputType}}" placeholder="{{inputPlaceholder}}" aria-label="Number" matInput [formControl]="myControl" [matAutocomplete]="auto">
    <mat-autocomplete #auto="matAutocomplete">
      <mat-option *ngFor="let option of items " [value]="option">
        {{option[field]}} 
      </mat-option> 
    </mat-autocomplete>
  </mat-form-field>

我也试着用“。”比如:"caption.default“

没有用请任何人帮我解决这个问题.!!

我正在尝试使用我的组件泛型,所以在任何我可以使用的地方,只需填充一些数据@输入,比如如果我有两个json

JSON-1

代码语言:javascript
复制
[{
    "caption": {
        "default": "Asset ID"
      }
},
{
    "caption": {
        "default": "Asset ID"
      }
}]

我的第二个json是JSON-2

代码语言:javascript
复制
[{
    "name": {
        "anything": "Asset ID"
      }
},
{
    "name": {
        "anything": "Asset ID"
      }
}]

因此,对于我的第一个json-1,我将使用这样的

代码语言:javascript
复制
<app-autocomplete [items]="data.attributes" [field]="'caption.default'" inputType="text" inputPlaceholder="placeholder"></app-autocomplete>

对于第二个json-2,我将使用这样的

代码语言:javascript
复制
<app-autocomplete [items]="data.attributes" [field]="'name.anything'" inputType="text" inputPlaceholder="placeholder"></app-autocomplete>

意味着我想要传递字段,这样它就可以自动遍历并显示数据。

EN

回答 3

Stack Overflow用户

发布于 2019-11-15 19:11:31

我会这样做,但函数应该是管道,或者数据需要在开始时计算(当数据的输入是使用setter触发时)。

代码语言:javascript
复制
fields: Array<string> = [];

    // build an array with your path
    @Input() set field(fields: string) {
        this.fields = fields.split('.');
    }

    // function to retreive the data
    // You need to make this a pipe 
    getValue(option: any): string {
        let temp: any;
        if (this.fields.length > 0 && option) {
            this.fields.forEach(field => {
                temp = option[field];
            })
        }
    return temp;
    }

html

代码语言:javascript
复制
<mat-option *ngFor="let option of items " [value]="option">
    {{ getValue(option) }} 
</mat-option> 
票数 0
EN

Stack Overflow用户

发布于 2019-11-15 19:29:00

简单的解决方案,但要进一步阅读才能知道哪里出了问题

变化

代码语言:javascript
复制
this.fields = field.split(".");
{{option[field]}} --->  {{option[fields[0]][fields[1]]}}

让我简化一下,

您基本上是试图访问作为数组一部分的对象的内部属性,因此试图传递字段数据并直接获取它,

关于项目,它应该是

代码语言:javascript
复制
items[index][ObjectAttr][innerObjAttr]

对于您的示例JSON1,应该是

代码语言:javascript
复制
`items[index][caption][default]`

但你所做的却是

代码语言:javascript
复制
items[index][[caption][default]]

这是行不通的

票数 0
EN

Stack Overflow用户

发布于 2019-11-15 20:04:43

我找到了“谢谢”,“ukn”和“shrivenkata kumar mhs”

代码语言:javascript
复制
getValue(Obj): any {
    var objPath=this.field.split(".");
      var s="Obj";
      for(var i=0;i<this.field.split(".").length;i++){
       s=s+"['"+objPath[i]+"']";
      }
     return eval(s);
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58882671

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档