0

我有几个绑定到不同模型字段的输入,例如model.aand model.b,我需要向服务器发送请求以获取自动完成数据。所以两者的逻辑是一样的。我想ng-change="changeHandler()"为每个添加指令。但是在里面changeHandler()我需要得到输入值——如何正确地做到这一点?我不能只取一些模型字段,因为这两个字段的代码相同。

4

3 回答 3

2

如果您想在每次更改时不触发对 Web API 的 GET 来执行此操作,则必须变得更复杂一些。

model.a在或model.b(或两者)上设置 $watch

在 $watch 处理程序中,通过 Promise 拉取自动完成结果,它看起来有点像这样:

myModule.factory('HelloWorld', function($q, $timeout) {

  var getMessages = function() {
    var deferred = $q.defer();

    $timeout(function() {
      deferred.resolve(['Hello', 'world!']);
    }, 2000);

    return deferred.promise;
  };

  return {
    getMessages: getMessages
  };

});

// from: http://markdalgleish.com/2013/06/using-promises-in-angularjs-views/

然后将自动完成绑定到 Promise 的结果。

您还需要去抖动您的更改,这篇 SO 帖子可能会有所帮助:如何在 AngularJS 中编写去抖动服务

我认为这篇博文可能会有所帮助:http ://www.grobmeier.de/angular-js-autocomplete-and-enabling-a-form-with-watch-and-blur-19112012.html#.UkMBIB1Dsak

于 2013-09-25T15:35:46.903 回答
1

将模型名称作为参数传递给更改函数:

<input type='text' ng-model='testinput' ng-change='changeHandler(testinput)'/>
于 2013-09-25T15:31:11.470 回答
1

您可以将这一切包装在一个可以访问 scope.model.a 的指令中,或者您可以像这样执行它:

ng-change="chanageHandler(model.a)" ng-model="model.a"

于 2013-09-25T15:31:15.467 回答