2016-05-04 64 views
1

我在圖像上有一個像/不同功能。 like/different是使用ng-class切換的。點擊圖標後,它會進行服務呼叫並切換狀態。但是,這不反映在用戶界面上。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看起來像

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

我覺得,你的問題是您的服務( '爲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

我試着添加$ scope。$ apply()但沒有效果 – Vik

+0

你的服務到底是什麼? Http請求?你有沒有檢查它真的叫你的回調?您是否在附加鏈接中檢查完整的js-fiddle示例? –

+0

順便說一下,還可以用''替換''像它在jsfiddle示例 –