2014-09-24 32 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">