如何仅在应用过滤器后重复?
How to ng-repeat only after applying the filter?
首先,让我提一下,我是 AngularJS 的新手,也是编程的新手。
我的情况如下:
我正在处理从 SQL 数据库中提取的超过 50k 个条目。
在对这些条目应用 search/filter 后,我必须在网络平台上显示这些条目。
所以我对此做了一些研究,得出的结论是:
SQL>PHP>JSON>ANGULARJS。
我把这一切都记下来了,问题是 ng-repeat 将所有内容发送到浏览器,我想要的是过滤结果然后用 ng-repeat 打印它们。
我已经尝试实现某种过滤器,但我似乎无法解决它。
代码如下所示:
js:
var app = angular.module('myApp' ,[]);
app.controller('MainCtrl', function($scope, $http)
{
$http.get("http:source.php")
.then(function(response)
{
$scope.materiale = response.data.records;
});
});
app.filter('filtruCautare', function () {
return function (items, filtru) {
var filtered = [];
var filtruMatch = new RegExp(filtru, 'i');
for (var i = 0; i < items.length; i++) {
var item = items[i];
if (filtruMatch.test(item.MATKL) || filtruMatch.test(item.MAKTX)) {
filtered.push(item);
} else if (filtruMatch.test(item.MATNR)) {
filtered.push(item);
}
}
return filtered;
};
});
html:
<input ng-model='filtru' type="text" placeholder="...">
<tbody ng-repeat="material in materiale | filtruCautare:filtru">
我从几个博客、Whosebug posts/questions 和其他几个来源将其汇总...
我认为我需要以某种方式过滤 50k 条目,将它们存储在一个范围内并使用 ng-repeat 从那里打印结果,只是我在创建一个从中提取信息的范围时遇到了问题过滤器。
感谢任何帮助!
如果搜索过滤器未定义(或者是空字符串),只需将过滤器更改为 return 一个空数组。
这样您将只有在开始过滤时才会开始看到结果:
app.filter('filtruCautare', function () {
return function (items, filtru) {
if (!filtru) {
return [];
}
var filtered = [];
var filtruMatch = new RegExp(filtru, 'i');
for (var i = 0; i < items.length; i++) {
var item = items[i];
if (filtruMatch.test(item.MATKL) || filtruMatch.test(item.MAKTX)) {
filtered.push(item);
} else if (filtruMatch.test(item.MATNR)) {
filtered.push(item);
}
}
return filtered;
};
});
首先,让我提一下,我是 AngularJS 的新手,也是编程的新手。 我的情况如下:
我正在处理从 SQL 数据库中提取的超过 50k 个条目。
在对这些条目应用 search/filter 后,我必须在网络平台上显示这些条目。
所以我对此做了一些研究,得出的结论是: SQL>PHP>JSON>ANGULARJS。 我把这一切都记下来了,问题是 ng-repeat 将所有内容发送到浏览器,我想要的是过滤结果然后用 ng-repeat 打印它们。
我已经尝试实现某种过滤器,但我似乎无法解决它。
代码如下所示:
js:
var app = angular.module('myApp' ,[]);
app.controller('MainCtrl', function($scope, $http)
{
$http.get("http:source.php")
.then(function(response)
{
$scope.materiale = response.data.records;
});
});
app.filter('filtruCautare', function () {
return function (items, filtru) {
var filtered = [];
var filtruMatch = new RegExp(filtru, 'i');
for (var i = 0; i < items.length; i++) {
var item = items[i];
if (filtruMatch.test(item.MATKL) || filtruMatch.test(item.MAKTX)) {
filtered.push(item);
} else if (filtruMatch.test(item.MATNR)) {
filtered.push(item);
}
}
return filtered;
};
});
html:
<input ng-model='filtru' type="text" placeholder="...">
<tbody ng-repeat="material in materiale | filtruCautare:filtru">
我从几个博客、Whosebug posts/questions 和其他几个来源将其汇总...
我认为我需要以某种方式过滤 50k 条目,将它们存储在一个范围内并使用 ng-repeat 从那里打印结果,只是我在创建一个从中提取信息的范围时遇到了问题过滤器。
感谢任何帮助!
如果搜索过滤器未定义(或者是空字符串),只需将过滤器更改为 return 一个空数组。
这样您将只有在开始过滤时才会开始看到结果:
app.filter('filtruCautare', function () {
return function (items, filtru) {
if (!filtru) {
return [];
}
var filtered = [];
var filtruMatch = new RegExp(filtru, 'i');
for (var i = 0; i < items.length; i++) {
var item = items[i];
if (filtruMatch.test(item.MATKL) || filtruMatch.test(item.MAKTX)) {
filtered.push(item);
} else if (filtruMatch.test(item.MATNR)) {
filtered.push(item);
}
}
return filtered;
};
});