在控制器中我想将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
答案 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
回调。其中填充了controllerAs
(main
)属性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
已经过了价值不参考。