限制 AngularJS ng 样式

Restrict AngularJS ng-style

提问人:hmd 提问时间:6/1/2021 更新时间:6/1/2021 访问量:54

问:

我正在通过我的自定义方法根据视口计算容器高度。ng-style

一切正常,但即使元素已设置样式,它也会继续调用该方法。我有大量的DOM元素需要设置样式。这就是为什么,我不能允许所有元素连续执行。请注意,我不能使用,因为每个元素都包含不同的内容。并且由于元素数量不受限制,因此无法使用控制器范围变量。ng-class

HTML格式:

<div class="myElement" ng-style="styleElement('myElement')">
    ...
    ...
</div>

功能:

$scope.styleElement =  function (elementCls) {
    var elementToSet = $('.'+elementCls+':visible');
    if(elementToSet.length){
        var winHeight = $( window ).height();
        var eTop = elementToSet.offset().top;
        if(eTop == 0){
            var elemChilds = elementToSet;
            var elemChildsLen = elemChilds.length;
            for(var i=0;i<elemChildsLen;i++){
                var elem = elemChilds[i];
                var r = elem.getBoundingClientRect();
                if(r.top != 0){
                    eTop = r.top;
                    i= elemChildsLen; 
                }
            }
        }
        var nScrollHeight = winHeight - eTop - 20;
        return { 
            'height': nScrollHeight + 'px',
            'overflow-x': 'hidden',
            'overflow-y': 'auto'
        };
    }
};

我尝试过使用一个,但由于性能原因,绑定或编写一个对我来说不是一个可取的解决方案。提前致谢!custom directiveDOMwatcher

angularjs 性能 dom angularjs-ng-样式

评论


答:

0赞 lacunha 6/1/2021 #1

使用一次性绑定,该绑定将仅调用一次。styleElement

<div class="myElement" ng-style="::styleElement('myElement')">
    ...
    ...
</div>

评论

0赞 hmd 6/4/2021
尝试并遇到错误:。Error: [$parse:syntax] Syntax Error: Token ':' not a primary expression at column 1 of the expression [::styleElement('myElement')] starting at [::styleElement('myElement')]
0赞 lacunha 6/4/2021
您使用的是哪个 angularjs 版本?这应该从 v1.3.0 开始工作