AngularJS ng-repeat稍微慢一点更新
AngularJS ng-repeat slightly slow updating
>我正在尝试使用 Angular 的 ng-repeat
指令为 textarea
元素创建一个行号系统。本质上,使用 ng-keyup
事件,我调用了一个函数updateLineNumbers()
,该函数计算textarea
中的行总数,并在需要时添加到附加到$scope
的行号数组中。
angular.module('editorApp')
.controller('LineNumberController', ['$scope', function($scope){
$scope.lines = [1];
$scope.updateLineNumber = function(){
var text = $("#editor").val();
var lines = text.split(/'r|'r'n|'n/);
var count = lines.length;
console.log(count);
if(count > $scope.lines.length){
console.log("adding line...");
var len = $scope.lines.length;
var linesToAdd = count - len;
console.log("lines to add: " + linesToAdd);
for(var i = 0; i < linesToAdd; i++){
console.log('adding line number: ' + (i + $scope.lines[len - 1] + 1));
$scope.lines.push(i + $scope.lines[len - 1] + 1);
}
}
}
}]);
顺便说一句,控制台日志语句仅用于调试目的。这工作正常,一切都显示我想要的样子,但我注意到它只是稍微慢一点。新行号出现在光标后面的一刻,使其进入下一行。我知道它很挑剔,但这困扰着我,我想知道 Angular 中是否有解决方案,或者我是否应该只使用 JQuery。
这是 html 代码:
<div class="main-editor" ng-controller="LineNumberController">
<div class="line-numbers">
<div ng-repeat="line in lines" id="line{{ $index + 1 }}">{{ $index + 1 }}</div>
</div>
<div class="editor-container">
<textarea name="editor" id="editor" cols="30" rows="10" ng-keyup="updateLineNumber()"></textarea>
</div>
</div>
这是普伦克尔http://plnkr.co/edit/0POJTx0p4rtfwOAaNRPb?p=preview
这是一种更简单的方法,使用手表打开ng-model
重要的部分是使用ng-trim="false"
否则ng-model
将在最后一个字符之后修剪分隔符
var lineCount = 1;
$scope.$watch('model.editor', function(nV, oV) {
if (!nV) {
$scope.lines = [1];
} else {
var lines = nV.split(/'r|'r'n|'n/);
// create new array if number of lines changed
if (lines.length !== lineCount) {
$scope.lines = lines.map(function(_, i) {
return i + 1
});
lineCount = lines.length;
}
}
});
视图
<div class="line-numbers">
<div ng-repeat="line in lines" id="line{{ $index + 1 }}">{{ line }}</div>
</div>
<div class="editor-container">
<textarea name="editor" id="editor" cols="30" rows="10" ng-model="model.editor" ng-trim="false"></textarea>
</div>
请注意,这在删除数据时也有效。
演示
相关文章:
- 正在寻找比$(document).ready慢的$(window).load的替代方案
- Javascript循环不会自我更新
- 添加文字和评论功能更新Div
- 如何识别我的网站中的慢速设备
- AngularJS:ng之后,重复$scope值未按预期更新
- 如何通过数组更新角度子范围
- Ajax聊天消息重复而不仅仅是更新
- 通过Javascript重复更新DOM后,网页变得很慢
- 我想听听服务器上的更改,并相应地更新我的网页.我如何用Javascript做到这一点
- JQuery 数据表列数据更新工作太慢
- AngularJS ng-repeat稍微慢一点更新
- Windows Phone 7 Web浏览器更新太慢
- 铯现场更新一点
- WebKit浏览器更新画布的速度很慢
- 具有大量行的表更新速度很慢
- Grunt更新非常慢
- 这一点.没有使用模板中的值更新内容
- 在Node.js Mongoose中,我想更新每个字段…我该如何做到这一点
- 更新后webkit动画非常慢
- chrome的DOM更新速度比firefox慢,看起来chrome有一些渲染问题