2016-05-04 5 views
1

画像にlike/different機能があります。 like/unlikeはng-classを使用して切り替えられます。アイコンをクリックすると、サービスコールが行われ、状態が切り替わります。しかし、これはUIに反映されていません。angularjsアクション後にクライアントをリフレッシュしません。

HTMLは次のとおりです。

<div class="col-sm-4 col-md-4" ng-repeat="result in searchCtrl.searchResults"> 
     <img class="img-responsive" ng-src="http://site.jpg"> 
      <div class="overlay"> 
        <a ng-click="searchCtrl.likeImage(result)"> 
        <span ng-class="'{{searchCtrl.getImageClass(result)}}'"></span></a> 
    </div> 

私のjsが、私が思う

app.controller('SearchController', function(){ 
    this.getImageClass = function(result){ 
      if(result.liked) 
       return 'fa fa-heart fa-4x'; 
      else 
       return 'fa fa-heart-o fa-4x'; 
     }; 

     this.likeImage = function(result){ 
      if(result.liked == false){ 
       myService({'mediaId':result.mediaId}).execute(function(resp) { 
        if(resp && resp.hasOwnProperty('error')) { 
         }else{ 
         result.liked = true; 
         } 
        }); 
      } 
     }; 
+1

UIに反映されていないのですか、ページが読み込まれていますか?私は投稿のタイトルが誤解を招くものと想定しています。 – niksofteng

+0

タイトルを修正していただきありがとうございました – Vik

+0

あなたのng-classが実際に呼び出されていることを確認して、期待されるクラスを返すことができます – atsituab

答えて

1

JS

のように見える、あなたの問題はあなたのサービス( 'myServiceという')が送信していることですいくつかのhttp要求。また、HTTP応答が受信された後、angularJSはダーティチェックを開始しません。コールバックでそれを行う必要があります。

this.likeImage = function(result){ 
     if(result.liked == false){ 
      myService({'mediaId':result.mediaId}).execute(function(resp) { 
       if(resp && resp.hasOwnProperty('error')) { 
       } 
       else{ 
        result.liked = true;      
       } 
       //pay attention there 
       $scope.$apply(); 
       }); 
     } 
    }; 

https://jsfiddle.net/aL5sqs31/2/があります。 ダミーのmyServiceを作成しようとしました。 HTTP要求の代わりにタイムアウトを設定しますが、構想は同じです

+0

私は$スコープを追加しようとしました$ apply()しかし効果なし – Vik

+0

あなたのサービスは何をしますか? HTTPリクエスト?あなたは本当にあなたのコールバックを呼び出すことを確認しましたか?あなたは添付されたリンクの完全なjs-fiddleの例をチェックしましたか? –

+0

ちなみに、 'で 'それはjsfiddleの例のようです –

関連する問題