【发布时间】:2019-01-09 17:04:52
【问题描述】:
我在动态更新元素样式时遇到问题。
我在图像顶部覆盖了一些边距。我创建了一个子组件来处理这个问题。我在我的子组件上调用一个函数来计算边距,然后设置一个变量。
这里是父组件调用,通过按钮点击触发。
showMargins() {
if (this.showingMargins) {
this.showingMargins = false;
} else {
this.showingMargins = true;
this.marginComponent.calculateMargins();
}
}
这是我的子组件:
marginStyles: any = {};
...
calculateMargins() {
//logic
...
//set the property
this.marginStyles = {
'height.px': height,
'margin-left.px': left
}
}
然后在我的模板中
<div id="margin-left" [ngStyle]="marginStyles">
我也尝试过使用函数
private leftDiv() {
debugger;
return this.marginStyles;
}
因此将我的模板更改为
<div id="margin-left" [ngStyle]="leftDiv()">
但无济于事。如果我在声明变量时对值进行硬编码,它可以正常工作。
marginStyles: any = {'height.px': 200, 'margin-left.px': 20};
如果我在模板中对其进行硬编码,它也可以正常工作;在我完成计算后它只是失败了,并且不会渲染我正在覆盖的线条。我哪里出错了?如果有帮助,我在 Angular 4 上。
编辑:我将所有逻辑移至父组件,一切看起来都很好。在我看来,marginStyle 的值没有在子组件中更新,这让我感到困惑。他们应该更新。 ngStyle 工作正常,它是未更新的变量。
【问题讨论】:
-
函数
calculateMargins()在哪里调用? -
被父组件调用。
-
你能在stackblitz.com/fork/angular上提供小演示吗?
-
返回 this.leftMarginStyles;或返回 this.marginStyles; ?
-
尝试使用
<div>{{ marginStyles | json }}</div>在视图中显示样式。它可能处于无效状态(height和left在您的代码中可能不是有效数字)。
标签: angular typescript