當你的文字區域超過15個字符,result
成爲undefined
—這就是ng-min/maxlength
指令是如何工作的。我想你必須寫出自己的指令。這裏是一個指令後15個字符,這將阻止輸入:
<textarea my-maxlength="15" ng-model="result"></textarea>
app.directive('myMaxlength', function() {
return {
require: 'ngModel',
link: function (scope, element, attrs, ngModelCtrl) {
var maxlength = Number(attrs.myMaxlength);
function fromUser(text) {
if (text.length > maxlength) {
var transformedInput = text.substring(0, maxlength);
ngModelCtrl.$setViewValue(transformedInput);
ngModelCtrl.$render();
return transformedInput;
}
return text;
}
ngModelCtrl.$parsers.push(fromUser);
}
};
});
fiddle
更新:允許超過15個字符,但禁用時提交按鈕計數超過15:
link: function (scope, element, attrs, ngModelCtrl) {
var maxlength = Number(attrs.myMaxlength);
function fromUser(text) {
ngModelCtrl.$setValidity('unique', text.length <= maxlength);
return text;
}
ngModelCtrl.$parsers.push(fromUser);
}
fiddle
有趣的事情,但對我來說(採用了棱角分明1.4.7 +打字稿1.8.7)HTML屬性「最大長度」的用法有同樣的效果,這裏提到的「ng-maxLength」:在將一些大的值(大於定義的限制)直接設置爲模型後,模型中的值變爲未定義。從我的角度來看,這是Angular bug(就像上面提到的[user3232182](http://stackoverflow.com/users/3232182/user3232182))。可能甚至沒有與ng-maxLength直接關聯,而是與整個綁定機制有關。 – bkg