2014-04-01 43 views
1

我想實現一個書籤般的功能到應用中,不得不看變量,它存儲所有的書籤的ID的。基於這個變量,我必須告訴ng-class重新評估它的函數表達式,因此類bookmarked get的添加與否。

我如何告訴ng-class再次運行變量$scope.Bookmarks的變化是什麼時候?

<a ng-repeat="event in events" 
    ng-class="isBookmarked(event.id)" 
    class="icon__bookmark"></a> 
+0

這與jquery有什麼關係? –

+0

當書籤更新時,isBookmarked(event.id)沒有被調用。 – Chandermani

+0

分享更多信息,控制器代碼。如果範圍內發生任何更改,則angularJs會自動調用isBookmarked。 – Anoop

回答

4

如果書籤ID是由角處理的代碼被改變(如控制器,一個指令,一個服務,$ HTTP回調,等等),那麼你就不需要在做什麼所有。 Angular會在需要時自動重新評估isBookmarked(event.id),以確保UI始終處於最新狀態。

如果出於某種原因,更新必須在由angular處理的代碼之外(例如在外部庫中)完成,那麼您可以手動強制角度更新。然而,強烈建議以確保代碼是由角度處理的。你通常可以這樣做,但這取決於情況。

如果您需要強制它,然後用$scope.$apply如下:

$scope.$apply(function() { 
    // Write code here to update bookmark ID's 
}); 
+1

這對我有用!出於某種原因,我的ngClass沒有重新評估我的scope.currentTime變種。 NG-CLASS = 「{cliptexthighlight:amHighlighted(currentTime的,clipText)}」 所以我把在:$ $範圍應用(函數(){$ = scope.currentTime currentTime的; });並強制ngclass重新評估 –

+0

是的,如果'$ scope.currentTime = currentTime;'是在一段不被angular調用的代碼中完成的(對於我來說,這通常意味着它在一個普通的JS回調函數(如事件處理函數)),那麼UI將不會使用該範圍上的新值進行更新。那就是你必須使用'$ scope.apply',就像你做的那樣:) – alexsanford1

1

假設類,你要添加一個名爲「書籤」的錨標記類和isBookmarked返回一個布爾值,使用此(fiddle):

<a ng-repeat="event in events" 
    ng-class="{bookmarked: isBookmarked(event.id)}" 
    class="icon__bookmark">{{event.name}}</a> 

你不應該調用$適用,如果書籤陣列控制器內,請參閱我公司提供的小提琴。

0

嘗試$route.reload()。它對於只在頁面加載時才評估一次的指令(如使用JQuery進行DOM操作的類型)非常有效。