AngularJS - ng-change通过控制器初始化触发

时间:2015-02-12 12:32:57

标签: javascript angularjs angularjs-ng-change

我的模板中有这样的内容:

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

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

我尝试在控制器中将searchText设置为null'',但它是相同的。

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

修改

我意识到此代码触发了我的searchRecords()

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

修改

我删除了ng-change并添加了此内容:

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

$scope.searchText没有任何更改的情况下,此代码正在控制器初始化上执行。

4 个答案:

答案 0 :(得分:5)

您可以使用ng-init设置标志,例如:&#34; NG-INIT =&#39;初始化=真&#39; &#34;,并在ng-change功能中检查

答案 1 :(得分:1)

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

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

干杯

答案 2 :(得分:0)

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

答案 3 :(得分:0)

我在google网上找到了一个有关角度的帖子 - https://groups.google.com/forum/#!topic/angular/uXldMqsQvRw

  

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

     

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

     

function save(newVal,oldVal){         if(newVal === oldVal)返回;         //在这里做点什么       }

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