AngularJS不会获取JSON数据

时间:2015-10-02 15:28:17

标签: javascript json angularjs

我想通过使用$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;
    });
} 

您对此有所了解吗?

2 个答案:

答案 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}}?如果我做出这些更改,我会得到一个可见的结果。