在我的应用程序中,我在其他相同的表单上设置了动态字段集。我可以从服务器加载它们作为 javascript 包括并且工作正常。
但是,能够从单独的 API 加载它们会更好。
$.getJSON() 提供了一种加载 json 的好方法,但我还没有找到合适的位置来执行此操作。显然,它需要在编译步骤开始之前完成。
我看到正式有一个 fieldTransform 设施。这可以用来将 vm.fields 从一个空对象转换为来自 API 的任何内容吗?
如果是这样,我会怎么做?
谢谢。保罗
在我的应用程序中,我在其他相同的表单上设置了动态字段集。我可以从服务器加载它们作为 javascript 包括并且工作正常。
但是,能够从单独的 API 加载它们会更好。
$.getJSON() 提供了一种加载 json 的好方法,但我还没有找到合适的位置来执行此操作。显然,它需要在编译步骤开始之前完成。
我看到正式有一个 fieldTransform 设施。这可以用来将 vm.fields 从一个空对象转换为来自 API 的任何内容吗?
如果是这样,我会怎么做?
谢谢。保罗
网站上有一个示例可以完全满足您的要求。它用于$timeout
模拟异步操作以加载字段配置,但您可以轻松地使用 angular 自己$http
的从服务器获取 json。它将表单隐藏在 an 后面,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'}); //??
});
..这至少会引发警报。但是,我不确定如何替换承诺以便将错误传播回调用者。
保罗