【问题标题】:Retaining the id of an object after reverse filter in angularjs, javascript在angularjs,javascript中进行反向过滤后保留对象的ID
【发布时间】:2014-03-09 06:58:05
【问题描述】:

这不是专门的 angularjs,而是 javascript。我从 angularjs 和 firebase 的聊天示例中抓取了一个过滤器,这就是它的样子。

angular.module('myApp')
  .filter('reverse', function () {
    function toArray(list) {
      var k, out = [];
      if( list ) {
        if( angular.isArray(list) ) {
          out = list;
        }
        else if( typeof(list) === 'object' ) {
          for (k in list) {
            if (list.hasOwnProperty(k)) {
              out.push(list[k]);
            }
          }
        }
      }
        return out;
      }
      return function(items) {
        return toArray(items).slice().reverse();
      };
  });

但该代码的问题在于它删除了对象的一个​​重要部分,即我使用的键,以便我可以使用该键来查询单个对象。

在我的模板中:

<div ng-repeat="(id, post) in posts | orderByPriority | reverse">
    <a href="posts/{{post.id}}">{{post.title}}</a>
</div>

我不能在(id, post) 中使用id,因为它只是reversed 数组的索引,即01234...

现在我在反向过滤器中添加了这个,但我无法让它工作。

 for (k in list) {
     if (list.hasOwnProperty(k)) {
         list[k].id = k;            // this is the one that I added.
         out.push(list[k]);
     }
 }

【问题讨论】:

  • 每条记录上应该已经有一个 $id 可以使用。

标签: javascript angularjs firebase


【解决方案1】:

你有两个选择 1.

for (k in list) {
    if (list.hasOwnProperty(k)) {
        list[k].key = k;
        out.push(list[k]);
    }
}
<div ng-repeat="(id, post) in posts | orderByPriority | reverse">
    <a href="posts/{{post.key}}">{{post.title}}</a>
</div>

这正是你尝试过的,我想。它确实对我有用。 (使用 post.key !!)

2。 可能更清洁的方法是坚持发布对象的键/值表示。您可以创建一个新数组 out 并在那里推送一个键/值对象。

for (k in list) {
    if (list.hasOwnProperty(k)) {
        var newObject = {};
        newObject[k] = list[k];
        out.push(newObject);
    }
}

我没有尝试第二种方法!

【讨论】:

  • 你有没有仔细阅读我的问题,我提到了那个。
猜你喜欢
  • 1970-01-01
  • 2012-10-25
  • 1970-01-01
  • 2019-10-30
  • 1970-01-01
  • 2012-07-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多