我不熟悉JavaScript Promises功能。
目前我在Angular Controller上有这个代码
$http.get('pages/about.html').then(function(response) {
var raw_html = response.data;
$scope.aboutHTML = raw_html.replace(/</g,"<");
});
我想重新编写代码,以便我可以做这样的事情
$scope.indexHTML = getHTML('pages/index.html');
$scope.aboutHTML = getHTML('pages/about.html');
...
有这样的功能
function getHTML(url){
$http.get(url).then(function(response) {
var raw_html = response.data;
return = raw_html.replace(/</g,"<");
});
}
如何正确编写上述函数的代码?
[更新#1]
的临时解决方案function getHTML(url){
// return the promise
return $http.get(url).then(function(response) {
var raw_html = response.data.replace(/</g,"<");
return raw_html;
});
}
getHTML('pages/index.html').then(function(raw_html){
$scope.indexHTML = raw_html;
});
我想编写这个函数来减少手动工作,这样我仍然需要为每个页面写下$ scope。{page},所以任何人都知道更好的方法吗?
[更新#2]
解决方案function getHTML(url){
// return the promise
return $http.get(url).then(function(response) {
var raw_html = response.data.replace(/</g,"<");
return raw_html;
});
}
getHTML('pages/index.html').then(function(raw_html){
$scope.indexHTML = raw_html;
});
答案 0 :(得分:1)
then()
返回一个promise,因此您需要从函数返回该promise并使用另一个function getHTML(url){
// return the promise
return $http.get(url).then(function(response) {
var raw_html = response.data.replace(/</g,"<");
return raw_html;
});
}
getHTML('pages/index.html').then(function(raw_html){
$scope.indexHTML = raw_html;
});
来分配范围变量:
arrowbutton.setOnClickListener()
目前您的功能不会返回任何内容
答案 1 :(得分:1)
没有办法只返回结果,因为结果将在未来一段时间内无法使用。 #asynchronous
您只能使用回调函数处理结果。
如果你想减少外面的工作,我会建议这样的事情:
getHTMLAndStore('pages/index.html', $scope, 'indexHTML');
getHTMLAndStore('pages/about.html', $scope, 'aboutHTML');
function getHTMLAndStore(url, object, property) {
$http.get(url).then(function(response) {
var raw_html = response.data;
var weird_html = raw_html.replace(/</g,"<");
object[property] = weird_html;
}).catch(console.error.apply(console));
}
这是纯粹的JS,与Angular无关。
请注意,这两个请求将并行触发,而不是按顺序触发。