Как загрузить угловой 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'}); //??
});
.. который, по крайней мере, выдает предупреждение. Однако я не уверен, как заменить обещание, чтобы передать ошибку обратно вызывающей стороне.
Павел