2

我正在测试一个角度/微风组合,我遇到

RangeError:超出最大调用堆栈大小

$watch当我使用角度和filter:searchText其他功能时,我假设所有属性都得到检查时出现类似错误

我很好奇我做错了什么。或者如果数组包含太多属性或其他东西。

例子:

<input type="search" ng-model="searchText" />
<div ng-repeat="station in stationsList | filter:searchText" class="view-list">
    <p>{{station.name}} </p>
</div>

从查询中获取车站的位置,例如breeze.EntityQuery.from("stations")

编辑:目前我正在这样做: Filtering by Multiple Specific Model Properties in AngularJS (in OR relationship)

效果很好,但控制器中有更多代码。

编辑 2: 如何使用 AngularJS 对多个对象应用过滤器?

这也是一个,但循环。

4

2 回答 2

1

如果您查看一个微风实体,您会发现它不仅仅是一个典型的 javascript 对象,而是隐藏了 _backingStore 和 entityAspect 下的所有内容。在 Chrome 中使用 AngularJS Batarang,您可以更轻松地看到我正在谈论的字段的爆炸式增长。

当您尝试观察一个实体时,Angular 所做的第一件事就是使用它自己的函数复制该对象。这是一个递归函数,在尝试探查 entityAspect 的深度时会死掉。

不幸的是,除了您已经发现的方法之外,我对此一无所知。我只是在我想要的每个单独的属性上手动设置一个手表,前面的对象相等。

编辑:我不能发表评论,所以只是为了更清楚,这就是我通过手动设置它的意思,如下所示:

$scope.foo.integer1 = 4
$scope.foo.string2 = 'bar'
$scope.$watch('[foo.integer1, foo.string2]', someFunctionToHandleChange, true

不确定为什么在所有情况下都使用过滤器会更好?

于 2013-07-09T15:37:08.650 回答
0

@Hawk - 即使您没有遇到实体循环引用,在 Angular 中过滤(或监视)列表中所有对象的所有属性也很少是明智的。所以这确实是一个 Angular 问题,与 Breeze 无关。

如果您打算过滤多个属性,我建议您使用第一个链接中所述的过滤器功能,通过 AngularJS 中的多个特定模型属性进行过滤。我个人不会像@Gendal 建议的那样单独观看房产。也许他/她有一个用例,在该用例中,观察单个属性比过滤器更可取;我想不出这样的案例。

是的,它是更多的代码。切拉维埃。

于 2013-07-09T19:23:22.170 回答