【发布时间】:2016-11-09 08:30:53
【问题描述】:
用户架构:
var UserSchema = new Schema({
review_likes : [{type:String}],
review_dislikes : [{type:String}]
});
查看架构:
var ReviewSchema = new Schema({
productID:{type: String, required: true},
numoflikes:{type:Number, required:true},
numofdislikes:{type:Number, required:true}
})
审核员:
.controller('reviewsController', function($route, reviewsFactory, $scope, $routeParams){
var that=this;
reviewid = $routeParams.id;
productID = $routeParams.id;
likestats = false;
dislikestats = false;
/* console.log('controller',questionid)
*/ var getallReviews = function(){
reviewsFactory.getReviews(function(data){
that.reviews = data;
})
}
getallReviews();
var getProReviews = function(productID){
reviewsFactory.getProductReviews(productID, function(data){
that.proreviews = data;
})
}
getProReviews(productID);
$scope.pID=productID;
this.addReview = function(){
reviewsFactory.addReview(this.newReview, function(message){
getallReviews();
console.log(message)
that.messages = message
})
this.newReview = {};
}
var getthatReview = function(){
reviewsFactory.getthatReview(reviewid, function(data){
/* console.log('[CONTROLLER] That Question:',data);
*/ that.review = data;
})
}
getthatReview();
this.getThatReview = function(){
reviewsFactory.getthatReview(reviewid, function(data){
/* console.log('[CONTROLLER] That Question:',data);*/
reviewsFactory.checkRevLike(reviewid, function(response){
if(response == "liked"){
data.likestats = true;
}
else{
data.likestats = false;
}
angular.forEach(that.proreviews,function(e){ if(e._id == reviewid)e.likestats = data.likestats; });
angular.forEach(that.reviews,function(e){ if(e._id == reviewid)e.likestats = data.likestats; });
})
that.review = data;
})
}
this.addlikereview = function(rId){
reviewid = rId;
reviewsFactory.addRevLike(rId, function(response){
that.getThatReview();
})
}
this.removelikereview = function(rId){
reviewid = rId;
reviewsFactory.removeRevLike(rId, function(response){
that.getThatReview();
})
}
this.checklikereview = function(review){
reviewid = review._id;
reviewsFactory.checkRevLike(review._id, function(response){
if(response == "liked"){
review.likestats = true;
}
else{
review.likestats = false;
}
})
}
this.getThatReview2 = function(){
reviewsFactory.getthatReview(reviewid, function(data){
/* console.log('[CONTROLLER] That Question:',data);*/
reviewsFactory.checkRevDisLike(reviewid, function(response){
if(response == "disliked"){
data.dislikestats = true;
}
else{
data.dislikestats = false;
}
angular.forEach(that.proreviews,function(e){ if(e._id == reviewid)e.dislikestats = data.dislikestats; });
angular.forEach(that.reviews,function(e){ if(e._id == reviewid)e.dislikestats = data.dislikestats; });
})
that.review = data;
})
}
this.adddislikereview = function(rId){
reviewid = rId;
reviewsFactory.addRevDisLike(rId, function(response){
that.getThatReview2();
})
}
this.removedislikereview = function(rId){
reviewid = rId;
reviewsFactory.removeRevDisLike(rId, function(response){
that.getThatReview2();
})
}
this.checkdislikereview = function(review){
reviewid = review._id;
reviewsFactory.checkRevDisLike(review._id, function(response){
if(response == "disliked"){
review.dislikestats = true;
}
else{
review.dislikestats = false;
}
})
}
})
html:
<div ng-controller="reviewsController as revCtrl ">
<div ng-repeat="review in revCtrl.proreviews>
<div ng-init="revCtrl.checklikereview(review)"> LIKE
<div ng-if="review.likestats" ng-href="#" ng-click="revCtrl.removelikereview(review._id)" class="glyphicon glyphicon-star ">
</div>
<div ng-if="!review.likestats" ng-href="#" ng-click="revCtrl.addlikereview(review._id)" class="glyphicon glyphicon-star-empty ">
</div>
<span ng-bind="review.numoflikes"></span>
</div>
<div ng-init="revCtrl.checkdislikereview(review)"> DISLIKE
<div ng-if="review.dislikestats" ng-href="#" ng-click="revCtrl.removedislikereview(review._id)" class="glyphicon glyphicon-star ">
</div>
<div ng-if="!review.dislikestats" ng-href="#" ng-click="revCtrl.adddislikereview(review._id)" class="glyphicon glyphicon-star-empty ">
</div>
<span ng-bind="review.numofdislikes"></span>
</div>
</div>
</div>
我正在尝试喜欢/不喜欢问题评论列表中的评论
我想将 1 个喜欢/不喜欢限制为 1 个用户的评论
这里发生的问题是,在 html 的显示中,字形图标立即成功更改,但 ng-bind="review.numoflikes" 和 ng-bind="review.numofdislikes" 的跨度并没有立即更新,而是页面刷新时更新
数据库正在成功更新
另外,如果你能帮助我限制用户只喜欢或不喜欢,那就太好了。谢谢。
【问题讨论】:
-
我不打算检查您的代码,但只推荐一些检查:(1)喜欢/不喜欢是否正确绑定(即在 HTML 中使用
ng-model)到 html 元素? (2)$scope或$rootScope是否知道与 DB 交互的函数?根据对喜欢/不喜欢的限制,只要用户选择一个按钮,只需禁用按钮即可。
标签: html angularjs node.js mean