在我的应用程序中,我有相同形式的动态字段集。我可以在javascript包含的情况下从服务器加载它们,并且运行正常。
但是,能够从单独的API加载它们会好得多。
$ .getJSON()提供了一个加载json的好方法,但我找不到合适的地方。显然,它需要在编译步骤开始之前完成。
我看到有一个fieldTransform工具。这可以用于将vm.fields从空对象转换为API中的任何内容吗?
如果是这样,我该怎么做?
THX。保罗
答案 0 :(得分:0)
网站上有an example可以完全满足您的要求。它使用$timeout
来模拟异步操作以加载字段配置,但您可以轻松地使用angular自己的$http
从服务器获取json。它隐藏了ng-if
后面的表单,只在字段返回时显示表单(当ng-if
解析为true时,它会编译模板)。
答案 1 :(得分:0)
Thx @kent
好的,所以我们需要用这个
替换getFields()promisefunction 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以便将错误传播回调用者。
保