2

我的模板中有这样的东西:

<input name="searchText" placeholder="Search" data-type="search" 
       ng-model="searchText" 
       ng-change="searchRecords()" 
       ng-keyup="onKeyUp()">

当我到达该模板时,searchRecords()会调用函数(触发 ng-change)。我只想searchRecords()在我开始输入时被调用(更改searchText将触发ng-change)。现在它在控制器初始化时被触发。

我试图在控制器中设置searchTextnull,''但它是一样的。

这种行为是设计使然还是我遗漏了什么?

编辑:

我意识到这段代码会触发我的searchRecords()

$scope.$watchGroup(['daysBefore', 'daysAhead'], function (newValues, oldValues, scope) { ... }

编辑:

我删除ng-change并添加了这个:

$scope.$watch('searchText', function (newValue, oldValue) {
                $scope.searchRecords();
            });

$scope.searchText在控制器初始化时执行此代码,无需任何更改。

4

4 回答 4

5

您可以使用 ng-init 设置一个标志,例如:“ng-init='initializing=true'”,并在 ng-change 函数中检查

于 2016-05-18T21:32:52.737 回答
1

您不需要使用 ng-change 您可以为该输入的 ng-model 创建观察程序。

$scope.$watch(function() {
  return $scope.searchText;
}, function(n, o) {
  if(n != o){
    $scope.searchRecords();
  }		
}, true);
<input ng-model="searchText">

干杯

于 2016-11-01T11:54:59.150 回答
0

如果你有一个 ng-model,那么有一个 ng-change 事件是正常的。您应该改为对 $scope.searchText 变量进行 $watch 。

于 2015-02-12T12:38:16.383 回答
0

我在 Angular 的 google 组中找到了一个关于此的主题 - https://groups.google.com/forum/#!topic/angular/uXldMqsQvRw

注册时手表会自动触发(并通过 $evalAsync 异步触发),这是初始化观察者并让您的代码知道初始值是什么。

如果这是不可取的,那么您可以将此检查放入您的保存方法中:

函数保存(newVal,oldVal){如果(newVal === oldVal)返回;// 在这里做事 }

所以是的,我想摆脱这样的代码,但显然我不能

于 2015-02-12T13:00:49.700 回答