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');
});
}
}
};
});