【发布时间】:2025-11-30 13:45:01
【问题描述】:
这是我的标记:
<div resizer>
<div class="a"></div>
<div class="b">
This content generated dynamically using ng-include and other directives inside
</div>
</div>
第二个 div (.b) 改变了它的高度(动态添加的元素)。我写了一个指令,应该根据可用高度更新第一个 div (.a):
'use strict';
myModule.directive('resizer', ['$timeout', function ($timeout) {
return {
restrict: 'A',
link: function (scope, element, attrs) {
function updateSizes(event) {
var a = element.find('.a');
var b = element.find('.b');
var bHeight = b.outerHeight();
var totalHeight = element.height();
a.height(totalHeight - bHeight);
}
element.on('some-event', updateSizes);
$timeout(updateSizes);
}
};
}]);
当我启动我的应用程序时,有时我的 div 高度为零(高度:0),因为 b.outerHeight();和 element.height();返回零。
这是为什么?我使用了 $timeout 以便浏览器有时间呈现视图。
有什么想法吗?
【问题讨论】:
-
The Angular Way 是一个常见的好问题。 AngularJS 有一个自然的流程,其中不断变化的模型重新定义了内容或样式。所以通常情况下,改变内容之类的“角度方式”就是 HTML 方式。似乎您想调整 div 的大小以适应内容。但是,如果我对你的理解正确,你做的工作太多了。 Div 本质上是为了根据内容调整大小。因此,除非您为 div 分配固定高度或宽度,否则它应该按照您的意愿行事。如果您想要额外的行为(填充、居中、固定宽度),这将是 CSS 答案而不是“Angular”。
-
这应该由css代替。
-
@DaveA 这无法使用 CSS 完成,因为我还需要在运行时更新尺寸。我将更新我的代码 - 还绑定到导致大小更新的事件。现在清楚了吗?
-
@Naor,仍然不清楚。我错过了一些大事。在我看来,Div 会自动根据内容调整大小。由于我已经绑定了模型数据或内容,并对其进行了更改(或更改了指令以使用不同的模板),因此我的 div 已调整大小。不是说 CSS 是你的答案,我想念为什么 div 需要任何调整大小 - ergo,使用范围变量更改内容或使用 ng-style 指令更改样式,并且 div 应该相应地更改。正如在这种类型的误解中经常发生的那样,我可能遗漏了您的功能目标的一部分。
-
比代码更新更好(有用)将是一个小提琴和解释它不能做什么以及需要改变什么!
标签: javascript css html angularjs angularjs-directive