javascript - 表单元素上的 $watch

标签 javascript angularjs forms

我正在尝试实现实时搜索,因此我有一个包含许多输入字段的搜索 因此每次用户更新输入字段时都应该触发搜索功能。

我想出了 $watch 来跟踪表单字段上的模型更改

$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>

谢谢

最佳答案

如果将 true 作为最后一个参数传递给 $watch,Angular 将监视深度相等,并且您可以立即监视整个对象:

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

这将导致在每个摘要周期创建对象的副本,但如果您的所有过滤器对象包含这些过滤器,那么它可能不会比单独观看所有内容效率更低。如果您的过滤器对象由于某种原因复制成本很高,您也可以使用 $watchGroup 来获得与当前代码相同的功能,但更简洁:

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

关于javascript - 表单元素上的 $watch,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26010963/

相关文章:

javascript - 在 Flash 中自动填写表单中的电子邮件/网站/地址?

javascript - 重用 knockout 模型的最佳实践

javascript - 以十进制显示 2 个数字的总和

两种方式绑定(bind)的 AngularJS 指令 $scope.$watch 不起作用

angularjs - 在 Angular 模板中,如果变量未定义,有没有办法抛出错误?

javascript - 逐渐打开html表单

php - 如何在保持纵横比的同时使用 CSS 自动调整 DIV 的大小?

javascript - 如果选择按钮,jQuery 显示/隐藏选项

javascript - 覆盖后访问window.console

javascript - 如何在 HH :MM AM format in Ionic 中显示日期时间