如何使用 Angular 搜索显示的数据而不是支持数据
How to search on the displayed data and not the backing data using Angular
我正在使用 ng-repeat
创建一个 table 数据:
<div class="divTable" ng-repeat="expense in exp.expenses | filter:exp.query">
<div>{{expense.amount | ldCurrency : true}}</div>
...
</div>
我正在创建的几个单元格正在通过 Angular filter
进行修改。在上面的示例中,我将 integer
更改为一种货币。所以将原来的4
改为.00
。当我 filter
整个列表与我的 exp.query
时,它不会通过 ldCurrency
.
修改 exp.query
搜索词
意思是如果我在</code>上搜索,它不会找到它,因为支持数据是<code>4
,即使
在页面上。
我知道这很令人困惑,因为我在这里谈论的是两种类型的过滤器。
如何搜索页面上显示的数据而不是支持数据?
您必须创建自己的过滤器。你想要做的是一个坏主意,因为你正在融合视图层和模型层。
过滤器示例。
html:
<input ng-model="query" ng-trim="true">
<span>Finding: </span><span>{{ query }}</span>
<div ng-repeat="product in products | productsFilter: query">
<strong>{{ $index }}</strong>
<span>{{ product.name }}</span>
<span>{{ product.price | currency: '$'}}</span>
</div>
自定义过滤器:
.filter('productsFilter', [function () {
// Private function: It removes the dollar sign.
var clearQuery = function (dirtyQuery) {
var index = dirtyQuery.indexOf('$');
if (index === -1)
return dirtyQuery;
return dirtyQuery.substr(index+1, dirtyQuery.length-index)
};
// The Custom filter
return function (products, query) {
if (query === '') return products;
var newProducts = [];
angular.forEach(products, function (product) {
var cleanQuery = clearQuery(query);
var strProductPrice = '' + product.price;
var index = strProductPrice.indexOf(cleanQuery);
if (index !== -1) {
newProducts.push(product);
}
});
return newProducts;
};
}]);
关键在angular.forEach
。在那里我决定产品是否属于新过滤的集合。在这里你可以做你想做的比赛。
您可以在 full plucker example and see a lot of filters in the a8m's angular-filter
中找到完整的示例
我正在使用 ng-repeat
创建一个 table 数据:
<div class="divTable" ng-repeat="expense in exp.expenses | filter:exp.query">
<div>{{expense.amount | ldCurrency : true}}</div>
...
</div>
我正在创建的几个单元格正在通过 Angular filter
进行修改。在上面的示例中,我将 integer
更改为一种货币。所以将原来的4
改为.00
。当我 filter
整个列表与我的 exp.query
时,它不会通过 ldCurrency
.
exp.query
搜索词
意思是如果我在</code>上搜索,它不会找到它,因为支持数据是<code>4
,即使在页面上。
我知道这很令人困惑,因为我在这里谈论的是两种类型的过滤器。
如何搜索页面上显示的数据而不是支持数据?
您必须创建自己的过滤器。你想要做的是一个坏主意,因为你正在融合视图层和模型层。
过滤器示例。
html:
<input ng-model="query" ng-trim="true">
<span>Finding: </span><span>{{ query }}</span>
<div ng-repeat="product in products | productsFilter: query">
<strong>{{ $index }}</strong>
<span>{{ product.name }}</span>
<span>{{ product.price | currency: '$'}}</span>
</div>
自定义过滤器:
.filter('productsFilter', [function () {
// Private function: It removes the dollar sign.
var clearQuery = function (dirtyQuery) {
var index = dirtyQuery.indexOf('$');
if (index === -1)
return dirtyQuery;
return dirtyQuery.substr(index+1, dirtyQuery.length-index)
};
// The Custom filter
return function (products, query) {
if (query === '') return products;
var newProducts = [];
angular.forEach(products, function (product) {
var cleanQuery = clearQuery(query);
var strProductPrice = '' + product.price;
var index = strProductPrice.indexOf(cleanQuery);
if (index !== -1) {
newProducts.push(product);
}
});
return newProducts;
};
}]);
关键在angular.forEach
。在那里我决定产品是否属于新过滤的集合。在这里你可以做你想做的比赛。
您可以在 full plucker example and see a lot of filters in the a8m's angular-filter
中找到完整的示例