2013-04-22 82 views
3

我已經編寫了一個簡單sider輸入的指令。AngularJS:如何防止/延遲過濾器的應用以避免重複ng-repeat

的小提琴是在這裏:發生http://plnkr.co/edit/PQXyxfmTbpaQE1ZnkQkq

的問題,當你改變一個人的年齡足以改變順序。有沒有辦法劫持ng-repeat元素的父作用域來不應用過濾器?

具體而言,我可以在滑塊拖動時停止重新排列元素嗎?比如,我會在mousedown事件上設置一些標誌,這將停止過濾,並刪除mouseup事件中的該標誌以允許重新排列。

我已經看過了Angular的源代碼,並且我確信目前無法做到這一點,但是我也歡迎修改Angular,可能會允許這樣做。

回答

0

創建您自己的自定義過濾器,並在您的視圖中使用它來代替orderBy。 (但是,您的自定義過濾器可以注入orderByFilter並使用它 - 見this SO answer關於更多信息)

<li ng-repeat="person in persons | myOrderBy:orderProp:doNotFilter"> 

內,您的自定義過濾器,檢查參數doNotFilter,這是你的指令將設置當作用域屬性當你彈起鼠標時你會清醒並且清晰。如果該屬性已設置,請勿過濾。

你必須「不過濾」屬性的名稱傳遞給你的指令:

<slider min="0" max="100" step="1" ng-model="person.age" do-not-filter="doNotFilter"> 

另一種方法是指定一個或兩個控制器方法爲您指示對鼠標按下呼叫和mouseup。那些方法將影響範圍屬性doNotFilter

<slider min="0" max="100" step="1" ng-model="person.age" 
    filter-stuff="filterStuff(filterState)"> 
+0

嗨,我接受你的答案,因爲似乎沒有別的選擇了,但我打算這是作爲一個獨立的插件。 – 2013-04-23 04:42:20