6

我在我的角度應用程序中使用了Bootstrap UI。我有一個html頁面工具提示工作正常。我注意到,在顯示工具提示並將鼠標移出後,Ui-bootstrap-tpls.js會觸發一個名爲「hideTooltipBind」的方法,該方法又調用$ apply,並觸發該範圍中的過濾器重新加載。帶過濾器問題的引導程序ui angularjs

比方說,我有10個過濾器在範圍內篩選100個數組。每次顯示工具提示時,我的所有過濾器都會被強制重新加載。我怎樣才能避免這種情況? 我使用

//ajax.googleapis.com/ajax/libs/jqueryui/1/jquery-ui.min.js 
jquery-2.0.3.js 
ui-bootstrap-tpls-0.11.0.js 

我附上調用棧

enter image description here

+1

工具提示指令實際上爲工具提示創建了[單獨作用域](https://github.com/angular-ui/bootstrap/blob/master/src/tooltip/tooltip.js#L110)。你確定它會導致*你的*整個範圍被消化? –

+0

是的,它會觸發所有手錶並過濾重新評估。 – Gokul

+5

這是我從Bootstrap UI團隊得到的回覆「這是AngularJS的工作原理 - 任何調用$ scope。$ apply都會觸發所有手錶和過濾器重新評估,這與工具提示無關 - 您將看到相同的例如,在輸入字段中輸入文本時的行爲。「 – Gokul

回答

0

的截圖可以利用某種形式的一次結合。有多種的選擇了:

有一些差異到四(與你手頭的問題無關):

  • 綁定一次是最流行的一個看到最活躍的發展。需要兩個指令來完成這項工作(bindoncebo-*)。
  • 角度一度是四個極簡主義者(不要在此引用我)。
  • 手錶戰士不處理基於承諾的數據。
  • fast-bind有一個用於半靜態綁定的通知系統,在Angular中使用事件總線。

假設你開始利用它們中的一個,你可以綁定這個樣子:

<div bindonce="someData"> 
    <span bo-bind="someData.text | yourFilter"></span> 
</div> 

<span once-text="someData.text | yourFilter"></span> 

<span set-text="someData.text | yourFilter"></span> 

<span bind-once="someData.text | yourFilter"></span> 

這樣,您的過濾器就不會在角度調用$digest時重新評估。如果您要過濾視圖中的集合(<li ng-repeat="coll | filter"></div>),我建議您將這些過濾器移至控制器,以減少過濾器本身的調用量。