2016-07-07 3 views
4

пользователя:нравится и не нравится обзор продукта пользователя в угловой схеме

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" не мгновенно обновляется, а обновляется на страница обновления

база данных успешно обновляется

также, если вы могли бы помочь мне ограничить только понравившуюся или нелюбовь пользователь, было бы здорово. Благодарю.

+0

Я не собираюсь проверить свой код, но только рекомендовать некоторые проверки: (1) являются как/не любят должным образом связаны (например, с помощью 'ng- model' в HTML) к элементам html? (2) Является ли функция, которая взаимодействует с БД, известной как '$ scope' или' $ rootScope'? В соответствии с ограничениями для одного типа/неприязни просто отключите кнопки, как только пользователь ее выберет. – FDavidov

ответ

2

нашел решение .. просто попробовать один раз

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