Angularjs - $ http请求在函数内部不起作用

时间:2015-04-23 21:10:14

标签: javascript angularjs function http

在控制器中我想将json文件的http请求放入函数中。只有在它的功能之外它才有效。为什么? 我想在视图中显示内容。

控制器:

$http.get('components/json/list.json').success(function (data) {
    main.listNoFunction = data;
});

main.listFunction = function () {
    var result = null;
    $http.get('components/json/list.json').success(function (data) {
        result = data;
    });
    return result;
}

查看:

// This works:
{{ main.listNoFunction }}

// This works NOT:
{{ main.listFunction }}

感谢您的帮助! VIN

2 个答案:

答案 0 :(得分:5)

你需要调用该函数,而不仅仅是引用它的对象名。

示例:

{{ main.listFunction() }}

此外,$ http是异步的,这意味着函数的结果将在$ http调用完成之前返回。

我建议你阅读https://docs.angularjs.org/api/ng/service/ $ q的承诺,以达到预期的效果。

答案 1 :(得分:2)

第二个例子没有理由可行。以下是两个片段的解释。

Snippet#1

$http.get('components/json/list.json').success(function (data) {
    main.listNoFunction = data;
});

此代码放入控制器发出GET请求。当响应可用时(请记住这是异步操作,因此$http.get立即返回),执行进入success回调。其中填充了controllerAsmain)属性listNoFunction。然后$http.get启动新的摘要循环,该循环应用范围对象并刷新视图。您可以看到正确呈现的数据。

Snippet#2

main.listFunction = function () {
    var result = null;
    $http.get('components/json/list.json').success(function (data) {
        result = data;
    });
    return result;
}

首先,您没有调用函数main.listFunction。但即使你这样做,结果仍然是一样的。同样,$http.get不会等到服务器响应,因此整个main.listFunction会返回undefined。当以后的数据进入success回调且result设置时 - 它太晚因为它无论如何都不会反映在视图中,因为result已经过了价值不参考。