2014-09-24 50 views
0

我试图实现实时搜索,所以我有一个搜索包括许多输入字段 所以每次当用户更新输入字段搜索功能应该被触发。

我已经想出了$表来跟踪表单字段

$scope.$watch('filters.site', function() { 
    $scope.$broadcast('updateDataTable'); 
}); 
$scope.$watch('filters.fname', function() { 
    $scope.$broadcast('updateDataTable'); 
}); 
$scope.$watch('filters.lname', function() { 
    $scope.$broadcast('updateDataTable'); 
}); 

模型的变化,但我只是想知道,反正是有让整个窗体价值变动

我的形式看起来像

<form name="searchForm"> 
    <label for="">FIRST NAME</label> 
    <input type="text" 
      class="form-control" 
      data-ng-model="filters.fname"> 
    <span></span> 
    <label for="">LAST NAME</label> 
    <input type="text" 
      class="form-control" 
      data-ng-model="filters.lname"> 
    <span></span> 
    <label for="">SITE</label> 
    <input type="text" 
      class="form-control" 
      data-ng-model="filters.site"> 
    <span></span> 
</form> 

感谢

回答

3

如果传递true作为最后一个参数来$watch,角会看深的平等,而不是,你可以同时观看整个对象:

$scope.$watch("filters", function() { ... }, true); 

这将招致每摘要创建对象的副本循环,但如果你所有的过滤器对象都包含这些过滤器,那么它可能不会比单独看一切事情更没有效率。如果您的过滤器对象是昂贵的复制出于某种原因,你也可以使用$ watchGroup等效功能添加到您当前的代码,除了简洁:

$scope.$watchGroup(["filters.site", "filters.fname", ...], function() { ... }); 
+0

辉煌,这将是确切的解决方案谢谢马蒂 – Gayan 2014-09-24 07:32:15

0
$scope.$watch('filters', function() { 
    $scope.$broadcast('updateDataTable'); 
}); 
0

可以使用NG-改变指令,它可能只是打电话给你的搜索功能将其添加到所有输入中,以便在调用其中一个输入时更改搜索功能。

<input type="text" class="form-control" data-ng-change="search()" data-ng-model="filters.fname">