Javascript 从函数返回';未分配给$scope?
这是我的控制器:Javascript 从函数返回';未分配给$scope?,javascript,angularjs,Javascript,Angularjs,这是我的控制器: $scope.mainModel = getReviews({model:mainModelArr[1]}); $scope.compareModel = getReviews({model:compareModelArr[1]}); function getReviews(data) { $http.post(url, data) .success(function(res) { formatReviews(res) }) .
$scope.mainModel = getReviews({model:mainModelArr[1]});
$scope.compareModel = getReviews({model:compareModelArr[1]});
function getReviews(data) {
$http.post(url, data)
.success(function(res) {
formatReviews(res)
})
.error(function(err) {
console.log("Something went wrong: "+err);
});
}
function formatReviews(data) {
var review = data[0];
review.sumReviews = (review.sumReviews/review.ratingAvg).toFixed(0);
review.sumRecommend = (review.sumRecommend/review.sumReviews*100).toFixed(1);
review.ratingAvg = (review.ratingAvg).toFixed(1);
console.log(review); // logs message fine
return review;
}
这些函数工作正常,记录查看变量,但不知何故它既没有将查看变量分配给$scope.mainModel
也没有分配给$scope.compareModel
注意:我知道它没有被分配,因为它从未在HTML中显示:
<p>{{mainModel}}</p>
{{mainModel}}
我做错了什么?我如何修复它?由于异步代码不允许您简单地返回值,您应该使用承诺的然后方法:
getReviews({model: mainModelArr[1]}).then(function(data) {
$scope.mainModel = data;
});
getReviews({model: compareModelArr[1]}).then(function(data) {
$scope.compareModel = data;
});
function getReviews(data) {
return $http.post(url, data)
.success(formatReviews)
.error(function(err) {
console.log("Something went wrong: "+err);
});
}
Ajax请求是异步工作的,angularjs使用承诺来处理这些请求
$scope.mainModel = undefined;
$scope.compareModel = undefined;
getReviews({model:mainModelArr[1]}).success(function(res){
$scope.mainModel = formatReviews(res);
});
getReviews({model:compareModelArr[1]}).success(function(res){
$scope.compareModel = formatReviews(res);
});
如果您return
post请求,您可以在任何地方处理它,在那里调用getReviews
方法
function getReviews(data) {
return $http.post(url, data)
.error(function(err) {
console.log("Something went wrong:", err);
});
}
function formatReviews(data) {
var review = data[0];
review.sumReviews = (review.sumReviews / review.ratingAvg).toFixed(0);
review.sumRecommend = (review.sumRecommend / review.sumReviews * 100).toFixed(1);
review.ratingAvg = (review.ratingAvg).toFixed(1);
console.log(review); // logs message fine
return review;
}
一本好书@MichaelVayvala我用了success
not然后
@MichaelVayvala Ops,忘了从getReviews返回
。