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ます)。現在、コントローラーの初期化で起動されます。

コントローラーで、に設定しようとしsearchTextましたが同じでした。null''

この動作は設計によるものですか、それとも何か不足していますか?

編集:

私は、このコードが私のを起動することに気付きました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='initializing=true' " のように ng-init を使用してフラグを設定し、ng-change 関数内でチェックすることができます。

于 2016-05-18T21:32:52.737 に答える
1

その入力の ng-model のウォッチャーを作成できる ng-change を使用する必要はありません。

$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

angularのGoogleグループでそれに関するスレッドを見つけました- https://groups.google.com/forum/#!topic/angular/uXldMqsQvRw

ウォッチは登録時に自動的に (そして $evalAsync を介して非同期に) 起動します。これにより、ウォッチャーが初期化され、コードに初期値が何であるかが通知されます。

これが望ましくない場合は、このチェックを save メソッドに入れることができます。

function save(newVal, oldVal) { if (newVal === oldVal) return; // ここで何かをする }

ええ、私はそのようなコードから離れたかったのですが、明らかに私にはできません

于 2015-02-12T13:00:49.700 に答える
0

ng-model がある場合、ng-change イベントが発生するのは正常です。代わりに $scope.searchText 変数の $watch を実行する必要があります。

于 2015-02-12T12:38:16.383 に答える