angularjs将相同的侦听器绑定到不同的输入,如何获取输入值

时间:2013-09-25 15:26:11

标签: javascript angularjs

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

3 个答案:

答案 0 :(得分:2)

如果你想在没有在每次更改的情况下为Web API启动GET的情况下执行此操作,那么您将不得不变得更加复杂。

model.amodel.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帖子可能会有所帮助:How to write a debounce service in AngularJS

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

答案 1 :(得分:1)

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

<input type='text' ng-model='testinput' ng-change='changeHandler(testinput)'/>

答案 2 :(得分:1)

你可以将这一切包装在一个可以访问scope.model.a的指令中,或者你可以这样做:

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