角度过滤器混乱

时间:2014-05-20 07:51:34

标签: javascript angularjs firebase angularfire

所以我的firebase中有一个用户列表。现在我向每个用户展示如下:

<input type="text" ng-model="search.username" placeholder="{{ 'SEARCH_USERS' | translate}}" class="form-control"> <br/>
<ul>
    <li ng-repeat="user in users | usernameFilter:search.username ">
        <a href="#/report/{{user.username}}">{{user.username}}: {{user.firstname}} {{user.lastname}}</a> <br/>
    </li>
</ul>
<p ng-show="error" >{{error}}</p>

Search.username或搜索没有区别,过滤器什么都不做。这是我的用户引用的内容:

Object {$id: "users", $bind: function, $add: function, $save: function, $set: function…}
$add: function (item) {
$auth: function (token) {
$bind: function (scope, name, defaultFn) {
$child: function (key) {
$getIndex: function () {
$getRef: function () {
$id: "users"
$off: function (type, callback) {
$on: function (type, callback) {
$remove: function (key) {
$save: function (key) {
$set: function (newValue) {
$transaction: function (updateFn, applyLocally) {
$update: function (newValue) {
Battle: Object
Litchy: Object
Robin: Object
__proto__: Object

Battle,Litchy和Robin都是用户。我想知道如何通过用户名过滤此列表,AngularJS文档示例中的简单方法似乎不适用于此,因为我的引用上没有明确的用户名属性。

编辑:Firebase结构截图:

firebase

2 个答案:

答案 0 :(得分:2)

@ExpertSystem对角度滤波器方法的工作提供了一些很好的见解。您还可以使用orderByPriority将$ firebase对象转换为有序数组,使用Angular的过滤工具可以更简单地使用它:

<li ng-repeat="user in users | orderByPriority | usernameFilter:search.username ">
    <a href="#/report/{{user.username}}">{{user.username}}: {{user.firstname}} {{user.lastname}}</a> <br/>
</li>

另请注意,即将推出的AngularFire版本中,orderByPriority可能会被一些更高级的数组工具($ asArray)取代。

答案 1 :(得分:1)

如果我理解correclty,你想过滤“按键” Angular的filter过滤器会过滤迭代对象的“值”,但您可以使用自定义过滤器按键过滤:

<div ng-repeat="user in users | byKey:search.username">

app.filter('byKey', function () {
    return function (obj, username) {
        if (!username) { return obj; }
        username = username.toLowerCase();

        var filtered = {};
        angular.forEach(obj, function (value, key) {
            if (key.toLowerCase().indexOf(username) !== -1) {
                filtered[key] = value;
            }
        });
        return filtered;
    };
});

<子> 注意: 我已经实现了过滤器来执行不区分大小写的子串匹配 您应该根据您的要求进行修改。

另请参阅此 short demo