javascript - angular 中的 ngRequired 和自定义指令

标签 javascript angularjs

当与 ngRequired 一起使用时,我似乎无法在 Angular 文档示例中找到智能 float 指令。

您可以通过转到 Angular 文档页面来确认这一点 https://docs.angularjs.org/guide/forms

在智能 float 示例上编辑 plunker,并添加 ng-required="false"。 确保检查整个表单的有效性,而不是单个控件。

如果控件上没有输入,表单本身总是被标记为无效。

我使用的是 1.3.0-rc3 版本

最佳答案

为了允许 smartFloat 指令为空值,您应该使用 $validators 结合 $parsers 来检查浮点值的有效性.另请注意,从任何解析器返回 undefined(或不返回任何值)将标记整个表单无效。

允许空值

var FLOAT_REGEXP = /^\-?\d+((\.|\,)\d+)?$/;
app.directive('smartFloat', function() {
  return {
    require: 'ngModel',
    link: function(scope, elm, attrs, ctrl) {
      // Parse
      ctrl.$parsers.unshift(function (viewValue) {
        if (!viewValue) {
          return ''; // <-- Don't return undefined, but empty string instead
        } else if (FLOAT_REGEXP.test(viewValue)) {
          return parseFloat(viewValue.replace(',', '.'));
        }
      });
      // Validate
      ctrl.$validators.float = function (viewValue) {
          if (viewValue === '') {
            ctrl.$setValidity('float', true); // <-- Handle empty value as valid
            return true;
          } else if (FLOAT_REGEXP.test(viewValue)) {
            ctrl.$setValidity('float', true);
            return true;
          } else {
            ctrl.$setValidity('float', false);
            return false;
          }
      };
    }
  };
});

实例见here .

关于javascript - angular 中的 ngRequired 和自定义指令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26051675/

相关文章:

javascript - 无法获取变量以传递给 JavaScript 中的数组

javascript - jQuery 文档 'nth'

javascript - IncomingMessage 中止事件

javascript - 是否可以替换 base 64 编码图像中的颜色?

javascript - 使用 ajax 将数据发布到本地服务器,无法设置请求名称

javascript - 如何从 Angular 外部函数中的内部 $http-function 返回值?

javascript - AngularJS:在 AngularJS 中动态生成表单

javascript - Anjularjss ng-options 不起作用选择

javascript - 从 MEAN 堆栈应用程序的 Controller 中的范围变量中选择不同的值

angularjs - 如何使用 Spring Security 4 + Spring Rest API 通过 Angular JS + JWT 身份验证开发 Remember Me 功能