0

假设我有一个包含 2 列(用户 ID、用户名)的表。我有两个输入文本字段,它们在更改时调用一个方法说 filter() 来过滤表中显示的数据。在 AngularJS 中,我将如何识别哪个元素称为 filter() 方法。我也想访问调用元素的数据属性。我刚从 Angular 开始,任何帮助都会很棒!

我的 HTML

<div ng-controller="MyCtrl">
<table><thead>
<tr><th><input type="text" class="filter" ng-model="jobid" ng-change="filter()" data-filterby="jobid"/></th>
<th><input type="text" class="filter" ng-model="name" ng-change="filter()" data-filterby="name"/></th></tr>
</thead></table>
</div>

我的 AngularJS 控制器

function MyCtrl($scope) {
  $scope.filter = function() {
    $item = angular.element(this);
    $item.val();
    /* ^^ This doesnt work - Throws an error*/
  }

我知道我可以很容易地为每个文本框设置单独的函数名称,但我希望有一个通用函数来处理这个问题,以获得更简单的代码。如果是 jquery 我可以做这样的事情

$(".filter").keyup(function() {
  var text = $(this).val();
  var filterby = $(this).attr("data-filterby");
});

因此,无论哪个文本框发生变化,我都可以获取该特定文本框中的值。

4

1 回答 1

0

由于ngChange似乎不像ngClick那样支持,因此您可以滚动自己的版本来公开它,或者将一些指示符传递给您的过滤器方法,例如...$eventngChange

<input type="text" class="filter" ng-model="jobid" ng-change="filter('jobid')" data-filterby="jobid"/>
<input type="text" class="filter" ng-model="name" ng-change="filter('name')" data-filterby="name"/>

然后像这样使用它:

$scope.filter = function(key) {
  console.log(key + ' is ' + $scope[key]);
}

我想我应该问......你想用价值做什么?可能有一种更 Angular 的方式来实现你想要做的事情。

于 2013-04-11T04:05:33.080 回答