【发布时间】:2016-03-22 20:08:12
【问题描述】:
我正在尝试过滤 ng-repeat,但我正在尝试使用函数而不是实际过滤器来过滤数据。我的印象是这样的事情会起作用
<tr ng-repeat="(key, value) in dataObj| filter:dataFilter">
并将 dataFilter 定义为作用域函数。
$scope.dataFilter = function (item) {
console.log(item);
return false
};
显然,过滤器只是一个测试,我本来希望它记录项目并为所有内容返回 false(因此在过滤器完成后不显示任何内容)。然而,过滤器似乎甚至没有被调用,因为日志没有触发。我不确定我做错了什么。我想尝试这种使用函数的方法,而不是需要注入的实际过滤器。
更新更多代码
指令
(function () {
'use strict';
angular
.module('test')
.directive('myDirective', MyDirective);
function MyDirective() {
return {
templateUrl: 'test.html',
controllerAs: 'controller',
controller: 'MyController',
"scope":{
"dataObj" : '='
}
};
}
})();
控制器
(function () {
'use strict';
angular
.module('test')
.controller('MyController', MyController);
MyController.$inject = ['$scope'];
function MyController($scope) {
$scope.dataFilter = function (item) {
console.log(item);
return false
};
}
})();
test.html
<table>
<tr ng-repeat="(key, value) in dataObj | filter:dataFilter">
<td>{{key}}</td>
<td>{{(value}}</td>
</tr>
</table>
上面的代码根本没有调用dataFilter函数。看来我必须将它作为一个函数调用,并可能向它发送一个参数。例如,如果我这样做:
<tr ng-repeat="(key, value) in dataObj | filter:dataFilter()">
控制台将记录“未定义”的次数等于 dataObj 中的项目数。 (很明显,因为没有传入参数)。但令人困惑的是,即使我没有传递任何数据或进行任何真正的过滤,我仍然希望视图根本不应该打印出任何数据,因为 dataFilter() 返回 false (作为对课程)。然而,所有数据都以 .
总体问题
作为过滤器的功能似乎根本不起作用,即使在实际调用时也是如此。我预计返回 false 的函数应该意味着 ng-repeat 将“过滤”(跳过)该特定项目。
第二个问题是如何将当前“项目”实际发送到 dataFilter 函数。我试过发送键和值,但它们都没有定义。
【问题讨论】:
-
你确定 dataObj 有值吗?如果您取下过滤器,它会改变什么?
-
您无法对对象进行排序或过滤
-
@LucasRoselli 是的,dataObj 有值,但过滤器/函数似乎根本不会被调用。有人会认为,如果调用它,我根本看不到任何数据,对吧? (因为它会自动返回 false)。但是我看到了所有的数据,所以就好像它没有被调用一样。更多细节:这是在指令中,尽管这无关紧要。 dataFilter 函数位于指令的控制器中。另外一个细节是我使用 angular 1.27
-
看你的支持代码:jsfiddle.net/yu2q2Lnz它已经通过了函数,我真的相信它是别的东西
-
请向我们展示整个代码,因为现在您说的是指令,我真的相信您的函数 dataFilter 它不在范围内
标签: javascript angularjs