未应用ng-repeat过滤器

时间:2015-01-08 13:44:53

标签: javascript angularjs

我有一个简单的代码,可以按间隔提取一些数据并打印到表格中。我想过滤表格行,但我想要应用的任何过滤器都会被忽略。我错过了什么?这基本上是AngularJS docs page的简单副本。

这里唯一的区别似乎是我正在使用控制器而示例代码却没有。

示例Plunkr

HTML模板:

<table>
  <thead>
    <tr>
      <th>Pages</th>
      <th>Last action</th>
      <th>Total time</th>
    </tr>
    <tr>
      <th><input ng-model="search.count"></th>
      <th><input ng-model="search.last"></th>
      <th><input ng-model="search.time"></th>
    </tr>
  </thead>
  <tbody>
    <tr ng-repeat="row in adminCtrl.rows | filter:search ">
      <td>{{ row.count }}</td>
      <td>{{ row.last }}</td>
      <td>{{ row.time }}</td>
    </tr>
  </tbody>
</table>

控制器:

(function(){
  var app = angular.module('admin', []);

  app.controller('AdminController', ['$interval', '$http', function($interval, $http){
    var admin = this;
    admin.rows = [];
    var timer = undefined;

    function updateRows() {
      $http.get('test.json').success(function(data) {
        admin.rows = data;
      });
    }

    admin.stopTimer = function() {
      if (angular.isDefined(timer)) {
        $interval.cancel(timer);
        timer = undefined;
      }
    };

    admin.startTimer = function(delay) {
      if (!angular.isDefined(delay)) {
        // Default interval 10 seconds.
        delay = 10000;
      }

      if (!angular.isDefined(timer)) {
        timer = $interval(updateRows, delay);
      }
    };

    admin.isTimerRunning = function() {
      return angular.isDefined(timer);
    }

    // Initialize rows.
    updateRows();

    // Start the interval timer.
    admin.startTimer();

  }]);

})();

2 个答案:

答案 0 :(得分:0)

这是因为你的ng-repeat重复一个对象而不是一个数组,这是你的adminCtrl.rows:

{"a":{"count":14,"last":"Lorem ipsum","time":45},"b":{"count":5,"last":"Some title","time":13}}

将其设为数组:

[{"count":14,"last":"Lorem ipsum","time":45},{"count":5,"last":"Some title","time":13}}]

如果您想在对象上使用过滤器,则必须使用

滚动自己的过滤器
.filter("MY_FILTER", function(){
    ...
});

答案 1 :(得分:0)

过滤器仅适用于数据为对象的array。只需将数据转换为数组即可。如果您正在使用lo-dash,那么这项工作很容易:

function updateRows() {
    $http.get('test.json').success(function(data) {
        admin.rows = _.toArray(data);
    });
}