Angularjs Ionic/Angular ng repeat在我离开视图后一直请求数据
在Ionic应用程序中,我有一个(隐藏)选项卡,其中有一个填充了ng repeat的列表:Angularjs Ionic/Angular ng repeat在我离开视图后一直请求数据,angularjs,ionic-framework,Angularjs,Ionic Framework,在Ionic应用程序中,我有一个(隐藏)选项卡,其中有一个填充了ng repeat的列表: <!-- ng-repeat that gets its items through a function --> <ion-item ng-repeat="product in getProducts()"> //The function that provides the list back (+filter in my real code) $scope.getProduc
<!-- ng-repeat that gets its items through a function -->
<ion-item ng-repeat="product in getProducts()">
//The function that provides the list back (+filter in my real code)
$scope.getProducts = function () {
console.log('In getProducts');
return $scope.list;
};
//提供列表返回的函数(+我的真实代码中的过滤器)
$scope.getProducts=函数(){
console.log('In getProducts');
返回$scope.list;
};
所有这些都可以正常工作,只是我注意到这个getProducts函数调用得太频繁了,即使我已经离开视图了。我不知道是什么原因导致了这一点,但我能够在Plnkr中轻松重现这一点:
要查看问题:在“主页”选项卡中,单击“添加项目”按钮,该按钮将导航到其他选项卡。在控制台中,您将看到它正在按预期启动功能。
现在单击其他一些选项卡,您将看到它继续处理相同的代码,而不再显示在视图中
是什么导致ng重复刷新?我错过了什么?
更新
作为一种解决方法,我禁用了特定视图的缓存,因此范围内的所有项目都会被销毁,因此不再进行处理。我认为
ng repeat
会尝试在每个摘要中评估产品,以查看是否有更改。因此,在您的例子中,getProduct()
被多次调用
如果要过滤产品,可以创建自定义角度过滤器,并使用ng repeat
中的filter
内置说明
HTML
<ion-item ng-repeat="product in products | filterProducts">
<h2>{{product.name}}</h2>
</ion-item>
有意思……你为什么不做列表中的
产品呢?@ekanshratogi嗨,我为plnkr做了一个非常简化的版本。在我的真实代码中,getProducts()执行一个过滤器return$scope.list.filter(…)
,它只显示与搜索标准匹配的项目。好吧。。。您可以观察更改列表的条件,然后筛选并存储在直接变量上。。。额外的呼叫发生是因为隐藏的div继续激活,而ng repeat的手表继续激活。感谢提示,但尝试此操作后,似乎无法解决问题。正如我所说,这是一种正常行为。Angular尝试在每个摘要周期评估您的产品。所以过滤器不会改变这一点。实际上,为什么它会困扰你?它会在任何选项卡中的任何操作中触发。在另一个选项卡中,我对某个行动有5个承诺。在这一点上,它将通过我的数百个项目的列表来过滤它们,这5次。这意味着在完全不相关的选项卡上执行任何操作时都会浪费大量的处理能力。我怀疑这是正常的行为,或者至少应该被认为是一个bug?有什么方法可以让我更隔离选项卡的范围吗?
app.filter('filterProducts', function () {
return function (product) {
// your filter function
return product;
};
});