javascript - 如何向 Angular 组件添加自定义验证?

标签 javascript angularjs

我有这个 Angular 组件,我想在其中添加自定义输入验证器 ( see plunker)。

我正在尝试访问 $onInit 函数中的 ngModelController。但它接缝的是此时没有填充表格。稍后在 sendEmail() 函数中访问输入模型 Controller 没有问题。如何访问 ngModelController 并添加自定义验证器?

邮件输入.js

(function(angular) {
  'use strict';

  function EmailInputController($log) {
    var ctrl = this;

    ctrl.$onInit = function() {
      // ctrl.myForm.myEmailInput is not populated 
      //$log.debug("Email view value is: "+(ctrl.myForm.myEmailInput.$viewValue));
    };

    ctrl.sendEmail = function() {
      $log.debug("EmailInputController.sendEmail");
      $log.debug("Email view value is: " + (ctrl.myForm.myEmailInput.$viewValue));
    };

  }

  angular.module('emailInputApp').component('emailInput', {
    templateUrl: 'emailInput.html',
    controller: EmailInputController,
  });
})(window.angular);

电子邮件输入.html

<form name="$ctrl.myForm">
  <label>Email:</label>
  <input name="myEmailInput" type="email" ng-model="$ctrl.email" required maxlength="15">
  <button type="button" ng-click="$ctrl.sendEmail()">Send Email</button>
  <p>Your Email addres is {{$ctrl.email}}</p>
  <div ng-messages="$ctrl.myForm.myEmailInput.$error" role="alert">
    <div ng-message="required">Please enter an email address.</div>
    <div ng-message="email">This field must be a valid email address.</div>
    <div ng-message="maxlength">This field can be at most 15 characters long.</div>
  </div>
  <code>
    {{$ctrl.myForm.myEmailInput | json}}
  </code>
</form>

最佳答案

http://plnkr.co/edit/YQfGAsix1DON4ff3EWxz?p=preview

您可以添加 watcher 并在不再需要时将其删除。

var removeWatch = $scope.$watch('$ctrl.myForm', function () {
        $log.debug("Email view value is: " + (ctrl.myForm.myEmailInput.$modelValue));

        removeWatch();
      });

关于javascript - 如何向 Angular 组件添加自定义验证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37371174/

相关文章:

javascript - 使用 ng-hide 根据条件显示/隐藏按钮

javascript - 动态重复模型

javascript - 引用错误: Can't find variable: d3

javascript - 退出前捕获 Electron 窗口的屏幕截图

javascript - 使用 Gulp Bootstrap JavaScript

javascript - JQuery 序列化表单未在 IE 中触发

angularjs - 我想将 md-datepicker 的格式设置为 dd-mm-yyyy

javascript - XDomainRequest 与 IE8 和 IE9 上的 XMLHttpRequest

javascript - 在 jQuery 中选择下一个 SELECT

javascript - 将旧值替换为新值(不包括子项)