【问题标题】:How to make an angular directive check constantly for an element's height?如何使角度指令不断检查元素的高度?
【发布时间】:2013-10-24 18:31:52
【问题描述】:

我使用这个指令:

App  
  .directive('maxHeightBorder', function(){
    return {
        restrict: 'A',
        link: function($scope, $el, $attr){
            if($el.height() >= $attr.maxHeightBorder){
                $el.css('box-shadow','0 0 5px 5px black');
            }
        }
    }
});

有了这个元素:<ul class="list-group" id="events-list" max-height-border="250">

问题是:当我加载页面时,这个元素是空的,指令的if 语句失败。加载后,Angular 会填充高度超过 250 像素的元素,但不会检查该指令,因此不会应用新样式。

【问题讨论】:

  • 如何用内容填充元素?请显示更多代码
  • <li class="list-group-item" ng-click="editEvent(trackedEvent)" ng-repeat='trackedEvent in trackedEvents'> 在 ul 内

标签: css angularjs


【解决方案1】:

试试这个:

directive('maxHeightBorder', function($timeout){ // inject $timeout wrapper
    return {
        restrict: 'A',
        link: function(scope, el, attr){
            $timeout(function(){
                if(el.height() >= attr.maxHeightBorder){
                    el.css('border-bottom','2px solid');
                }
            });
        }
    }
});

另请参阅:How JavaScript Timers Work

【讨论】:

  • 如果一切都失败了,计时器将是后备解决方案。这是一个可能经常出现的条件 CSS,我不想在几十个并发计时器下陷入困境。不过感谢您的建议!
  • 然后您可以广播/发出自定义事件并检查这些事件。见:docs.angularjs.org/api/ng.$rootScope.Scope
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-21
  • 2019-04-16
  • 2015-03-09
  • 2023-03-09
  • 1970-01-01
  • 2015-07-05
相关资源
最近更新 更多