3

我已经为简单的边输入编写了一个指令。

小提琴在这里: http: //plnkr.co/edit/PQXyxfmTbpaQE1ZnkQkq

当您更改某人的年龄足以更改订单时,就会出现问题。有没有办法劫持 ng-repeat 元素的父范围以不应用过滤器?

具体来说,我可以在拖动滑块时阻止元素重新排列吗?就像,我会在mousedown事件上设置一些标志以停止过滤,并在事件上删除该标志mouseup以允许重新排列。

我查看了 Angular 源代码,我很确定目前无法做到这一点,但是我也欢迎对 Angular 进行修改以允许这样做。

4

1 回答 1

0

orderBy创建您自己的自定义过滤器,并在您的视图中使用它。(但是,您的自定义过滤器可以注入orderByFilter和使用它——有关更多信息,请参阅此 SO 答案。)

<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">

另一种方法是为指令指定一个或两个控制器方法来调用 mousedown 和 mouseup。然后这些方法将影响doNotFilter范围属性。

<slider min="0" max="100" step="1" ng-model="person.age" 
    filter-stuff="filterStuff(filterState)">
于 2013-04-22T18:06:52.273 回答