我是AngualRJ的新手。我试图在文本方面显示其余字符。
<textarea ng-model="message" ng-maxlength="100"></textarea>
<div id="characters" ng-model="message"><span>Characters left: {{remaining()}}</span> </div>
这是功能:
this.scope.remaining = function() {
return this.scope.maxlength - this.scope.message.length;}
我遇到的错误是:
Error: Error while interpolating: Characters left: {{remaining()}} TypeError: this.scope is undefined
任何人可以帮忙吗?
我认为您可能使它比需要的要复杂。尝试以下操作:
在您的控制器中:
.controller('myCtrl', function($scope /* other dependencies here */){
...
$scope.maxLength = 100; // this is the max # of chars allowed in the textarea
...
});
在您的html中:
<textarea ng-model="message" ng-maxlength="{{maxLength}}"></textarea>
<div id="characters">
<span>Characters left: {{maxLength - message.length}}</span>
</div>
{{maxLength - message.length}}
的双向绑定将立即更新,当用户键入TextArea中的用户类型时剩下的字符数量。
很好的答案,网球!但是,必须在模板中插值最大值才能启动验证。
这是一个带有插值的小提琴:https://jsfiddle.net/t1fhppc9/
如果键入的字符数超过了ng-maxlength的值( $ scope.maxlength ),则角清除绑定模型( $ scope.message )。剩余的字符数量( maxlength -message.length )的度量将不再有效。这可以在上述小提琴中看到。
为了处理这种情况,我在范围上添加了一个函数并将其绑定到模板(就像User3214545的方法一样)。这样,最大长度验证将应用于文本区域,其余字符指标将告诉您您超出的字符数量。
模板:
<div ng-controller="myCtrl">
<textarea
ng-model="message"
ng-maxlength="{{ maxLength }}">
</textarea>
<div>
<span>Characters left: {{ remaining() }}</span>
</div>
If there are more than {{ maxLength }} characters, then a red border will be shown.
<div>
Message: {{ message }}
</div>
</div>
控制器:
function myCtrl($scope) {
$scope.maxLength = 5;
$scope.remaining = function() {
return $scope.maxLength - angular.element(document).find('textarea')[0].value.length;
}
}
在这里'带有功能的小提琴:https://jsfiddle.net/zz13p1tm/
在更现实的情况下,这将包裹在指令中。范围和元素都将传递给指令。使用孤立范围,我们还可以控制最大长度,必需,禁用以及是否应在模板上显示其余字符的参数。
我认为this.scope.meraining在控制器中定义。不用使用此。Scope.Remanding,将$ scope作为依赖项和做$ scope.Memaining。
如果您共享JSFIDDLE,我们将能够确切查看问题。
您需要将范围作为参数传递到函数中。