Javascript AngularJS:过滤器更改的触发函数
我正在为一个有角度的表格分页,并希望显示表格下的所有页码 我计划创建一个页码数组,然后使用ng repeat显示所有页码: HTMLJavascript AngularJS:过滤器更改的触发函数,javascript,angularjs,Javascript,Angularjs,我正在为一个有角度的表格分页,并希望显示表格下的所有页码 我计划创建一个页码数组,然后使用ng repeat显示所有页码: HTML <tr ng-repeat-start="item in c.filteredList = (c.data | dynamicFilter:c.filter | orderBy:c.sortOrder.order:c.sortOrder.reverse)"> JS this.checkPage = function(){ th
<tr ng-repeat-start="item in c.filteredList = (c.data | dynamicFilter:c.filter | orderBy:c.sortOrder.order:c.sortOrder.reverse)">
JS
this.checkPage = function(){
this.pageNumArr = [];
for(i=0; i<this.filteredList.length/this.perPage; i++){
this.pageNumArr.push(i);
}
}
this.checkPage=function(){
this.pageNumArr=[];
对于(i=0;i您可以查看filteredList
并在那里调用checkPage()
:
var self = this;
$scope.$watch(
function() {
return self.filteredList.length;
},
function(newValue, oldValue) {
if (newValue !== oldValue) {
self.checkPage();
}
}
);
您可以查看filteredList
并在那里调用checkPage()
:
var self = this;
$scope.$watch(
function() {
return self.filteredList.length;
},
function(newValue, oldValue) {
if (newValue !== oldValue) {
self.checkPage();
}
}
);
最好将页码ng repeat绑定到一个函数,该函数创建并返回页码数组。这将为函数创建一个监视程序,并使页码数组保持最新
无需在控制器中手动创建$watch
this.pageNumbers= function(){
var pageNumArr = [];
for(i=0; i<this.filteredList.length/this.perPage; i++){
pageNumArr.push(i);
}
return pageNumArr
}
<span ng-repeat="page in c.pageNumbers()">{{page}}</span>
this.pageNumbers=function(){
var pageNumArr=[];
对于(i=0;i您最好将页码ng repeat绑定到一个创建并返回页码数组的函数。这将为函数创建一个监视程序,并使页码数组保持最新
无需在控制器中手动创建$watch
this.pageNumbers= function(){
var pageNumArr = [];
for(i=0; i<this.filteredList.length/this.perPage; i++){
pageNumArr.push(i);
}
return pageNumArr
}
<span ng-repeat="page in c.pageNumbers()">{{page}}</span>
this.pageNumbers=function(){
var pageNumArr=[];
对于(i=0;i我认为在过滤器内触发事件不应该被视为最佳实践,可能需要找到另一种方法
顺便说一下,有很多方法:
如果您可以编辑该筛选器,只需将$scope
引用传递给它,并通过$scope.emit
或$scope.broadcast
:
Angular支持控制器内部的过滤器,因此,这可能是一个更好的解决方案(看看过滤器4:controller/$scope filter)
在你的模型上注册一个观察者,但是,这对性能不好
我认为在过滤器内触发事件不应该被视为最佳实践,也许,您需要找到另一种方法
顺便说一下,有很多方法:
如果您可以编辑该筛选器,只需将$scope
引用传递给它,并通过$scope.emit
或$scope.broadcast
:
Angular支持控制器内部的过滤器,因此,这可能是一个更好的解决方案(看看过滤器4:controller/$scope filter)
在你的模型上注册一个观察者,但是,这对性能不好
谢谢。这很好。对创建$watch的性能影响有什么想法吗?谢谢。这很好。对创建$watch的性能影响有什么想法吗?我想我从来没有见过在过滤器中使用$emit。这是怎么做到的?是的,这是一个自定义过滤器:app.filter('paginate',function(){返回函数(input,perPage,pageNum){var startRow=perPage*(pageNum-1);var endRow=startRow+perPage返回input.slice(startRow,endRow);}
我认为@Pascal Winter正确地展示了您正在寻找的内容,最好的解决方案是通过过滤器将分页器绑定到当前页面列表。顺便说一下,当您传递pageNum
和perPage
时,您甚至可以传递$scope
或它的一个属性(函数?)。我想我从未见过$emit在过滤器中使用。这是如何实现的?是的,这是一个自定义过滤器:app.filter('paginate',function(){return function(input,perPage,pageNum){var startRow=perPage*(pageNum-1);var endRow=startRow+perPage return input.slice(startRow,endRow);})
我认为@Pascal Winter正确地展示了您正在寻找的内容,最好的解决方案是通过过滤器将分页器绑定到当前页面列表。顺便说一下,当您传递pageNum
和perPage
时,您甚至可以传递$scope
或它的一个属性(函数?)。