我有一个简单的代码,可以按间隔提取一些数据并打印到表格中。我想过滤表格行,但我想要应用的任何过滤器都会被忽略。我错过了什么?这基本上是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();
}]);
})();
答案 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);
});
}