Как загрузить угловой vm.fields объект из удаленно сгенерированного json?

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

Однако было бы намного лучше иметь возможность загружать их из отдельного API.

$.getJSON () предоставляет хороший способ загрузки json, но я не нашел подходящего места для этого. Понятно, что его нужно завершить до начала этапа компиляции.

Я вижу, что есть средство fieldTransform в форме. Может ли это быть использовано для преобразования vm.fields из пустого объекта во все, что приходит из API?

Если так, как бы я это сделал?

Спасибо. Павел

2 ответа

На сайте есть пример, который делает именно то, о чем вы спрашиваете. Оно использует $timeout для имитации асинхронной операции для загрузки конфигурации поля, но вы также можете легко использовать собственную угловую $http получить JSON с сервера. Скрывает форму за ng-if и показывает только форму, когда поля возвращаются (когда ng-if разрешается в true, это скомпилировать шаблон).

Спасибо @kent

Итак, нам нужно заменить обещание getFields() этим

function getFields() {
  return $http.get('fields-demo.json', {headers:{'Cache-Control':'no-cache'}});
}       

Это возвращает data.fields, поэтому в vm.loadingData мы говорим

vm.fields = result[0].data;

Кажется, работает на ОК для меня.

При тестировании я заметил, что вы должны убедиться, что в вашем json нет ничего плохого, например, использовать тип поля, который вы не определили. В этом случае полученное сообщение об ошибке не очень ясно.

Кроме того, вам нужно иметь дело с ситуацией, когда источник данных недоступен. Я попробовал это:

function getFields() {
  console.log('getting',fields_url);
    return $http.get(fields_url, {headers: {'Cache-Control':'no-cache'}}).
    error(function() {
      alert("can't get fields from server");
      //return new Promise({status:'fields server access error'}); //??
    });

.. который, по крайней мере, выдает предупреждение. Однако я не уверен, как заменить обещание, чтобы передать ошибку обратно вызывающей стороне.

Павел

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