我想通过使用$http.get
和AngularJS从JSON文件中获取数据。
我使用"新方式"编写AngularJS脚本(link)。
的 PLUNKER
没有任何事情发生,Firebug什么也没告诉我。
我认为问题出在我的activate()
功能代码中,我并不理解这些承诺。
function activate() {
return $http.get('test.json').then(function(data) {
vm.result = data;
return vm.result;
});
}
您对此有所了解吗?
答案 0 :(得分:2)
您return
回调中的then
无法$http
。只需返回$http is undefined
调用本身,这将是一个承诺,并解决它。此外,您的控制台应该告诉您类似function activate() {
return $http.get('test.json')
}
[...]
activate().then(function(response) {
vm.result = response.data;
});
的内容,因为您没有正确注入此服务。请注意以下内容......
activate()
Plunker - 演示
附注 - 您可能希望将controller
包装到可重复使用的服务中以使此逻辑不在我们的控制器中,因此我们将定义的服务注入$http
而不是直接@XmlRootElement( name = "labdata")
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "labdata", propOrder = {"labId",
"labDesc",
"lastUpdateDatetime",
"userId"})
public class LabData extends DbObject
{
@XmlTransient
private HashMap<String, Object> mappedFields;
@XmlElement(name="lab_id", required = true)
private Integer labId;
@XmlElement(name="lab_desc", required = true)
private String labDesc;
@XmlElement(name="last_altered_dt", required = true)
private Timestamp lastUpdateDatetime;
@XmlElement(name="user_id", required = true)
private String userId;
@XmlTransient
private final String labIdField = "TST_LAB_CD";
@XmlTransient
private final String labDescField = "LAB_DSC_TE";
@XmlTransient
private final String lastUpdateDatetimeField = "INS_GMT_TS";
@XmlTransient
private final String userIdField = "USR_ID";
@XmlTransient
private final String tableName = "TSTLAB";
/**
* Default constructor.
*/
public LabData() {
super();
mappedFields = new HashMap<String, Object>();
}
/**
* Constructor which takes all fields as parameters
* and will update the protected hash map after setting all the fields.
* @param labId {@link Integer}
* @param labDesc {@link String}
* @param lastUpdateDatetime {@link Timestamp}
* @param userId {@link String}
*/
public LabData(Integer labId, String labDesc, Timestamp lastUpdateDatetime, String userId) {
super();
this.labId = labId;
this.labDesc = labDesc;
this.lastUpdateDatetime = lastUpdateDatetime;
this.userId = userId;
updateHashMap();
}
public Object[] getFieldValues() {
return new Object[] {this.labId, this.labDesc, this.lastUpdateDatetime, this.userId};
}
public Object[] getUpdateFieldValues() {
return new Object[] {this.labDesc, this.lastUpdateDatetime, this.userId};
}
public void updateHashMap() {
mappedFields.clear();
mappedFields.put(this.labIdField, this.labId);
mappedFields.put(this.labDescField, this.labDesc);
mappedFields.put(this.lastUpdateDatetimeField, this.lastUpdateDatetime);
mappedFields.put(this.userIdField, this.userId);
}
getters and setters...
}
。
Plunker - 这个逻辑的演示包含在一个简单的服务中
答案 1 :(得分:2)
我看到了一些问题。
首先,在你的plunker代码中:
controller.$inject = ["$http"];
function controller() {
您缺少控制器功能签名中的$ http参数。
function controller($http) {
一旦我解决了这个问题,我发现你的index.html页面绑定到{{c.value}}
,但你的控制器从未定义一个value属性。也许这应该是{{c.result}}
?如果我做出这些更改,我会得到一个可见的结果。