代码之家  ›  专栏  ›  技术社区  ›  iiminov

自动扩展文本区域(AngularJs指令)

  •  0
  • iiminov  · 技术社区  · 8 年前

    在我的指令中需要一点帮助吗 <textarea>

    这个想法相当简单。 <文本区域> 元素看起来就像普通的 <input> 元素,直到逻辑确定文本没有足够的空间并通过增加高度来扩展它。

    我有一个问题,隐藏的元素 ng-show ng-if 不显示正确的高度时 <

    是否可以确定该元素是否尚未展开并对该元素重新运行指令?

    指令

    .directive('lwAutoExpand', function ($window) {
        var LinkFn = function (scope, element, attr, ngModel) {
            element.css("overflow", "hidden");
            element.context.style.height = parseInt(element.css("line-height").replace("px", ""), 10) + parseInt(element.css("padding-top").replace("px", ""), 10) + parseInt(element.css("padding-bottom").replace("px", ""), 10) + "px";
    
            scope.$watch(function () { return ngModel.$modelValue; }, function (value) {
                if (element.context.scrollHeight > parseInt(element.context.style.height.replace("px", ""), 10)) {
                    element.context.style.height = element.context.scrollHeight + "px";
                }
            });
    
            angular.element($window).on("resize", function () {
                if (element.context.scrollHeight > parseInt(element.context.style.height.replace("px", ""), 10)) {
                    element.context.style.height = element.context.scrollHeight + "px";
                }
            });
        };
    
        return {
            require: 'ngModel',
            link: LinkFn,
        };
    })
    

    Html格式

    <textarea placeholder="please type something into the field"
              ng-model="user_text"
              ng-if="display_element_based_on_another_elements_value"
              lw-auto-expand></textarea>
    

    0 回复  |  直到 8 年前