2016-07-07 9 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"のスパンは即座に更新されずに更新されますページリフレッシュ

データベースが正常に更新されています

また、ユーザーの好き嫌いを助けることができれば、それは素晴らしいことです。ありがとう。 (1)/などが適切にng- `使用して(すなわち拘束嫌いされています

+0

一度それを試して...解決策を見つけましたHTML内のmodel?)をhtml要素に変換しますか? (2)DBと対話する関数は '$ 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; 
     }) 
    }