0

在我的应用程序中,我在其他相同的表单上设置了动态字段集。我可以从服务器加载它们作为 javascript 包括并且工作正常。

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

$.getJSON() 提供了一种加载 json 的好方法,但我还没有找到合适的位置来执行此操作。显然,它需要在编译步骤开始之前完成。

我看到正式有一个 fieldTransform 设施。这可以用来将 vm.fields 从一个空对象转换为来自 API 的任何内容吗?

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

谢谢。保罗

4

2 回答 2

0

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

于 2015-06-25T12:02:27.430 回答
0

谢谢@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'}); //??
    });

..这至少会引发警报。但是,我不确定如何替换承诺以便将错误传播回调用者。

保罗

于 2015-06-27T06:23:21.360 回答