2014-09-26 18 views
2

我似乎無法得到在與ngRequired一起使用的angular docs示例中找到的smart float指令。ng需要和自定義指令的角度

您可以通過進入角文檔頁面 https://docs.angularjs.org/guide/forms

編輯在智能浮動例如plunker證實了這一點,並添加NG-所需=「FALSE」。 確保檢查整個表單的有效性,而不是單個控件。

如果控件上沒有輸入,表單本身始終標記爲無效。

我使用的版本1.3.0-RC3

回答

1

爲了允許smartFloat指令,你應與$parsers使用$validators爲浮點值的有效性檢查空值。另請注意,從任何解析器返回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

+0

我仍然無法得到它的工作。問題是表單本身被標記爲無效。該元素本身似乎沒有任何問題,但如果您沒有對指令進行輸入,則表單將被標記爲無效。 – 2014-09-29 08:26:42

+0

@artbonghanoy你可以分享代碼(html + js)嗎?可能問題不在於指令本身。 – Vadim 2014-10-01 06:38:03

+0

@Vadmin,我終於明白了。請在[stackoverflow]上閱讀此問題(http://stackoverflow.com/questions/25739986/what-is-the-purpose-of-the-new-built-in-parse-validation-key-in-angular-1 -3)。請使用1.3中的新驗證方案更新您的答案,以便我可以接受它。 – 2014-10-01 08:55:55

相關問題