textareaにディレクティブを追加
AngularJSでtextareaタグの高さを自動調整するディレクティブを作成。
使い方は下記のJavaScriptのコードを記述してtextareaタグにresize-textarea ng-model="r"を付けるだけ。
行間の高さはデフォルトは20pxにしてあるので30pxなどに変更したい場合はresize-textarea="30"と記述すれば変更可能。
AngularJSのディレクティブでtextareaタグの高さを自動調整するサンプル
<textarea resize-textarea ng-model="r"></textarea>
var app = angular.module('app', []); app.directive("resizeTextarea", function() { return { restrict: 'A', link: function(scope, elem, attrs) { if(elem[0].nodeName === 'TEXTAREA') { var HEIGHT = attrs['resizeTextarea'] ? attrs['resizeTextarea'] : 20; var resize = function(e) { var textHeight = e.target.scrollHeight; var height = Math.floor(textHeight / HEIGHT) * HEIGHT elem.css('height', height + 'px'); }; elem.css({ 'lineHeight': HEIGHT + 'px', 'height': HEIGHT + 'px', 'min-height': HEIGHT * 2 + 'px' }); elem.on('input', resize); scope.$watch(attrs.ngModel, function() { var textHeight = elem[0].scrollHeight; var height = Math.floor(textHeight / HEIGHT) * HEIGHT if(height > HEIGHT) { height = height - HEIGHT; } elem.css('height', height + 'px'); }); } } }; });