2013-04-22 79 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