2013-04-11 61 views
0

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

我的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"); 
}); 

所以它永远文本框的变化,我可以在那个特定的文本框中的值。

回答

0

由于不会出现ngChange支持$eventngClick呢,你可以滚你自己的ngChange版本,公开它或者通过一些指标,你的过滤方法一样......

<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]); 
} 

我想我应该问......你想要对价值做什么?可能有更多的角度来实现你想要做的事情。

+0

谢谢。我试图根据在输入框中输入的内容来过滤表中的值。 – user1429007 2013-04-11 04:16:38

+1

听起来像你只需要'ngRepeat' w /'过滤器',不是吗? http://jsfiddle.net/langdonx/jPH74/ – Langdon 2013-04-11 04:22:19

+0

是的。我实际上使用ngRepeat,但没有考虑过滤器。我们是否有类似的方法来根据字段中的值对数据进行排序? – user1429007 2013-04-11 04:27:56