Преобразование значения в строковый объект для привязки свойства

У меня есть компонент для динамического создания моей формы, поэтому я получаю все метаданные с сервера, и в моем шаблоне есть ngFor для создания моих полей. Все атрибуты связываются с результатом данных, пришедших с сервера. В одном из них у меня следующая ситуация: если такой жесткий код
[filterParams]="{state:model.state_field}"
, когда я вызываю сервис, я могу использовать этот filterParams как объект и отправлять по http-запросу, но я использую метаданные из server я на самом деле кодирую так,
[filterParams]="metadata.filterParams"
и внутри metadata.filterParams у меня есть строка "{state:model.state}", но значение для "state" не может быть строкой, потому что я использую стоимость модели.

Как я могу преобразовать строку, полученную из моих метаданных, в объект, который получает значение из модели, точно так же, как это работает при жестком кодировании?


person Anderson Maciel    schedule 06.11.2019    source источник
comment
console.log(metadata) и покажите вывод   -  person Adrita Sharma    schedule 06.11.2019
comment
Я изменил имена, чтобы задать вопрос, но в metadata.filterParams у меня есть значение metadata.filterParams: "{state:model.state_field}" Я также обновил вопрос.   -  person Anderson Maciel    schedule 06.11.2019
comment
В кавычках? ""?   -  person Adrita Sharma    schedule 06.11.2019
comment
да, потому что это происходит из возврата json. Я попытался вернуть как объект json, но когда я понял, что жесткое кодирование в [filterParams] с "{state:model.state_field}" заставило фильтр работать, я изменил возврат на строку.   -  person Anderson Maciel    schedule 06.11.2019


Ответы (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);
  }

Рабочая демонстрация

Из вашего комментария: когда я понял, что жесткое кодирование в [filterParams] с "{state:model.state_field}"

Здесь: [filterParams]="{state:model.state_field}"

"" не является строкой, кавычки используются только для привязки объекта {state:model.state_field}

person Adrita Sharma    schedule 06.11.2019
comment
Это не то, что я пытаюсь сделать. Мне действительно нужно, чтобы [filterParams] имел значение "{state : model.state_field}" (с двойными кавычками) со значением, полученным из метаданных, потому что каждый запрос к моей конечной точке будет получать значение state_field из модели и преобразовываться в строку запроса, например state=NY или state=FL если изменить состояние. Я использую фреймворк, который создает поля для меня, поэтому мне нужно передать значение фильтра таким образом. - person Anderson Maciel; 06.11.2019
comment
@Adrita в вашем примере, после последнего console.log(), если вы делаете model.state_field = 2; console.log(this.metadata);, значение остается 1 - person Anderson Maciel; 06.11.2019
comment
Да, это очевидно, так как строка уже оценена до этого - person Adrita Sharma; 06.11.2019
comment
Я использую библиотеку Portinari UI (ссылка), и мой вопрос связан с компонентом под названием lookup. Даже я вижу их исходный код, я не знаю, как передать выражение фильтра. - person Anderson Maciel; 06.11.2019