如何从远程生成的json加载角度形式的vm.fields对象?

时间:2015-06-25 09:37:16

标签: json angularjs angular-formly

在我的应用程序中,我有相同形式的动态字段集。我可以在javascript包含的情况下从服务器加载它们,并且运行正常。

但是,能够从单独的API加载它们会好得多。

$ .getJSON()提供了一个加载json的好方法,但我找不到合适的地方。显然,它需要在编译步骤开始之前完成。

我看到有一个fieldTransform工具。这可以用于将vm.fields从空对象转换为API中的任何内容吗?

如果是这样,我该怎么做?

THX。保罗

2 个答案:

答案 0 :(得分:0)

网站上有an example可以完全满足您的要求。它使用$timeout来模拟异步操作以加载字段配置,但您可以轻松地使用angular自己的$http从服务器获取json。它隐藏了ng-if后面的表单,只在字段返回时显示表单(当ng-if解析为true时,它会编译模板)。

答案 1 :(得分:0)

Thx @kent

好的,所以我们需要用这个

替换getFields()promise
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'}); //??
    });

..至少会抛出警报。但是,我不确定如何替换promise以便将错误传播回调用者。