javascript - AngularJS:如何从另一个设置一个输入值,并让它像用户输入一样通过验证?

标签 javascript angularjs angularjs-ng-form

我正在使用 angular 1.3.0rc2,并且我正在尝试让一个输入字段在模糊时设置另一个输入字段,就好像它是用户输入的一样。

如果我尝试设置的输入上只存在一个同步验证器,并且没有去抖动或异步验证器,那么当我执行类似以下操作时,事情似乎总是按预期工作:

myForm.username.$setViewValue('some value');
myForm.username.$render();

但是,当我尝试设置的输入上存在异步验证器或反跳,并且我尝试设置的输入处于当前无效状态时,事情似乎没有按预期工作。

我创建了以下 plunkr 来展示我的困境。尝试设置“全名”的值,看看 用户名 字段会发生什么,我也想将其设置为 模糊 全名 字段。当 Username 字段处于无效状态时,更改 Full Name 的值然后从字段中移除焦点不会更新 Username,因为我会期待。

http://plnkr.co/edit/h1hvf79W8ovqAlNLpBvS

所以,我的问题是,我如何设置一个输入字段,使其能够可靠地工作,并且就像用户自己输入了这个新输入一样(从而运行验证器并相应地更新模型值) )?

最佳答案

试一试,当您模糊全名时,它应该会调整用户名。

Plunkr

ngModel

HTML

Full Name:
<input name="fullName" ng-model="fullName" test-validator change-field="username" />
User Name:
<input name="username" ng-model="username" required />

JS

angular.module("testApp",[]).controller("testCtrl", function($scope) {  


}).directive('testValidator', ['$sce', function ($sce) {
  return {
    restrict: 'A',
    require: '?ngModel',
    link: function (scope, element, attrs, ngModel) {
      if(!ngModel) return;

      element.on('blur', function () {
        scope.$apply(read);
      });

      function read() {
        if(attrs.changeField) {
          var field = attrs.changeField;
          scope.myForm[field].$setViewValue(element.val());
          scope.myForm[field].$render();
        }
      }
    }
  }
}])

关于javascript - AngularJS:如何从另一个设置一个输入值,并让它像用户输入一样通过验证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26035871/

相关文章:

angularjs - 如何在 TypeScript 中使用 ES6 模块语法导入 angular.IInjectorService

javascript - 如何解决嵌套指令范围问题?

javascript - 当我的所有 Ng-from 都有效时启用一键

具有初始延迟的 JavaScript Canvas 动画

javascript - 在响应式网页中,如何用 Javascript 获取视口(viewport)的可见内容?

javascript - 从方法引用中捕获 with 回调函数

JavaScript:设置间隔仅运行一次?

javascript - 我怎样才能不包含 ngIf 附加到 AngularJS 的元素?

javascript - 从 FormController 获取表单控件