Angular 2/4: присвоить значение массива из функции обещания на уровне обслуживания переменной в компоненте

Я вызываю функцию публикации на уровне обслуживания, используя Promise, который возвращает мне JSONArray. Я могу получить его на уровне компонентов, но не могу присвоить переменной.

Я пробовал:

config;


ngOnInit() {
    this.dataService.getTemplateData(this.templateId).then(result => this.config = result)
          .catch(error => console.info(error));
  }

:: result is printing jsonArray properly

В консоли появляется следующая ошибка.

AppComponent.html:34 ERROR TypeError: Cannot read property 'forEach' of undefined
    at DynamicFormComponent.webpackJsonp.../../../../../src/app/dynamic-form/containers/dynamic-form/dynamic-form.component.ts.DynamicFormComponent.createGroup (dynamic-form.component.ts:24)
    at DynamicFormComponent.webpackJsonp.../../../../../src/app/dynamic-form/containers/dynamic-form/dynamic-form.component.ts.DynamicFormComponent.ngOnInit (dynamic-form.component.ts:19)
    at checkAndUpdateDirectiveInline (core.es5.js:10843)
    at checkAndUpdateNodeInline (core.es5.js:12341)
    at checkAndUpdateNode (core.es5.js:12284)
    at debugCheckAndUpdateNode (core.es5.js:13141)
    at debugCheckDirectivesFn (core.es5.js:13082)
    at Object.eval [as updateDirectives] (AppComponent.html:34)
    at Object.debugUpdateDirectives [as updateDirectives] (core.es5.js:13067)
    at checkAndUpdateView (core.es5.js:12251)

Я ожидаю:

config = [
    {
      "type": "input",
      "label": "Full name",
      "name": "name",
      "placeholder": "Enter your name"
    },
    {
      "type": "select",
      "label": "Favourite food",
      "name": "food",
      "options": ["Pizza", "Hot Dogs", "Knakworstje", "Coffee"],
      "placeholder": "Select an option"
    },
    {
      "label": "Submit",
      "name": "submit",
      "type": "button"
    },
  ];

Вот моя логика .html: -

  <div class = "app">
            <dynamic-form [config] = "config">
            </dynamic-form>
  </div>

Мой уровень обслуживания:

getTemplateData (data: any): Promise {

let headers = new Headers({ 'Content-Type': 'application/json' });
let options = new RequestOptions({ headers: headers });
return this.http
        .post(this.templateDataUrl, data, options)
    .toPromise()
    .then(this.extractData)
    .catch(this.handleError);
}

 private extractData(res: Response) {
    let body = res.json();
    return body || {};
}

Ошибка находится в вашем html для этого компонента, не могли бы вы добавить ее в вопрос. AppComponent.html:34

Zze 02.01.2019 06:19

Консультируйте результат журнала и покажите его.

Arcteezy 02.01.2019 06:32

Я включил свой html-контент и содержание служебного уровня в вопрос

Puneet Bhardwaj 03.01.2019 08:54

У вас есть ошибка на вашем app.component.ts. Пожалуйста, включите код, содержащий forEach

veben 03.01.2019 09:01

эта ошибка приходит ко мне, когда я назначаю свой результат jsonArray конфигурации, как указано в приведенном выше коде

Puneet Bhardwaj 03.01.2019 10:04
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
2
5
119
2

Ответы 2

Пожалуйста, поделитесь полным кодом dynamic-form.component. проблему будет легко отследить.

DynamicFormComponent.createGroup (dynamic-form.component.ts:24)

в строке выше config не определен, поэтому выдает ошибку Вы должны вызвать метод creatGroup(), подобный этому

 this.dataService.getTemplateData(this.templateId).then(result => {
    this.config = result;
    this.creatGroup()
}).catch(error => console.info(error));

Обратитесь к добавленному html и служебному слою в моем вопросе, который я только что отредактировал. Если вам нужен какой-либо другой код файла, плохо поделитесь. Спасибо

Puneet Bhardwaj 03.01.2019 08:58

Не могли бы вы поделиться кодом для файла dynamic-form.component.ts и dynamic-form.component.html?

Ajay Barokar 04.01.2019 09:12

Что ж, проблема решена. Я правильно инициализировал "config" и теперь могу назначить. Спасибо за помощь всем

Puneet Bhardwaj 05.01.2019 06:09

Правильно инициализировав переменную конфигурации, я смог назначить данные параметру

config: any[] = [];

Другие вопросы по теме