喜欢和不喜欢角度审查用户的产品 [英] like and dislike review of a product by user in angular

查看:144
本文介绍了喜欢和不喜欢角度审查用户的产品的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

用户模式:
$ b

  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}
})



< ($ route,reviewsFactory,)复制控制器:

  .controller('reviewsController' $ 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){
rev iewsFactory.getProductReviews(productID,function(data){
that.proreviews = data;
})
}
getProReviews(productID);
$ scope.pID = productID;
$ b this.addReview = function(){
reviewsFactory.addReview(this.newReview,function(message){
getallReviews();
console.log(message )
that.messages = message
})
this.newReview = {};

$ b $ var getthatReview = function(){
reviewsFactory.getthatReview(reviewid,function(data){
/ * console.log('[CONTROLLER])问题:',data);
* / that.review = data;
})
}
getthatReview();


$ b this.getThatReview = function(){
reviewsFactory.getthatReview(reviewid,function(data){
/ * console.log(' [CONTROLLER]那个问题:',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.revi ews,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;
}
其他{
review.dislikestats = false;
}
})
}


})

$ html:

 < div ng-controller =reviewsController as revCtrl> 
< div ng-repeat =review revCtrl.proreviews>
< div ng-init =revCtrl.checklikereview(review)> LIKE
< div ng-if =review.likestatsng-href =#ng-click =revCtrl.removelikereview(review._id)class =glyphicon glyphicon-star>
< / div>
< div ng-if =!review.likestatsng-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.dislikestatsng-href =#ng-click =revCtrl.removedislikereview(review._id)class =glyphicon glyphicon-star>
< / div>
< div ng-if =!review.dislikestatsng-href =#ng-click =revCtrl.adddislikereview(review。 _id)class =glyphicon glyph icon-star-empty>
< / div>
< span ng-bind =review.numofdislikes>< / span>
< / div>
< / div>
< / div>

我试图喜欢/不喜欢评论列表中的评论



我想限制1个喜欢/不喜欢1个用户的评论

这里发生的问题是,在显示屏中html,glyphicon会立即成功更改,但ng-bind =review.numoflikes和ng-bind =review.numofdislikes的跨度不会立即更新,而会在页面刷新时更新。

数据库正在成功更新



另外,如果您可以帮助我限制用户喜欢或不喜欢的情况,那就太棒了。感谢。

解决方案

找到解决方案..只需尝试一次

 this.getThatReview = function(){
reviewsFactory.getthatReview(reviewid,function(data){
/ * console.log('[CONTROLLER] That Question: ',data); * /
reviewsFactory.checkRevLike(reviewid,function(response){

if(response ==likes){
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 ;});

angular.forEach(that.proreviews,function(e){if(e._id == reviewid)e.numoflikes = data.numoflikes;});

angular.forEach(that.reviews,function(e){if(e._id == reviewid)e.numoflikes = data.numoflikes; });


})
that.review = data;
})
}


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;});

angular.forEach(that.proreviews,function(e){if(e._id == reviewid)e.numofdislikes = data.numofdislikes;});

angular.forEach(that.reviews,func (e){if(e._id == reviewid)e.numofdislikes = data.numofdislikes; });


})
that.review = data;
})
}


user schema:

var UserSchema = new Schema({
    review_likes :      [{type:String}],
    review_dislikes :   [{type:String}]
});

review schema:

var ReviewSchema = new Schema({
    productID:{type: String, required: true},
    numoflikes:{type:Number, required:true},
    numofdislikes:{type:Number, required:true}
})

review controller:

       .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>  

i'm trying to like/dislike a review in a list of reviews in questions

i want to limit 1 like/dislike to a review by 1 user

the problem occurring here is that in the display in html, the glyphicon successfully changes instantly but the span with ng-bind="review.numoflikes" and ng-bind="review.numofdislikes" is not instantly being updated but is updated on page refresh

the database is being successfully updated

also, if you could help me to restrict only like or dislike by user, it would be great. thanks.

解决方案

found a solution .. just try it once

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; });

                angular.forEach(that.proreviews,function(e){  if(e._id == reviewid)e.numoflikes = data.numoflikes; });

                angular.forEach(that.reviews,function(e){  if(e._id == reviewid)e.numoflikes = data.numoflikes; });


            })
            that.review = data;
        })
    }


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; });

                angular.forEach(that.proreviews,function(e){  if(e._id == reviewid)e.numofdislikes = data.numofdislikes; });

                angular.forEach(that.reviews,function(e){  if(e._id == reviewid)e.numofdislikes = data.numofdislikes; });


            })
            that.review = data;
        })
    }

这篇关于喜欢和不喜欢角度审查用户的产品的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆