【发布时间】:2020-01-13 01:04:29
【问题描述】:
我遇到了最奇怪的问题。我确实有一个组件的样式由它正在处理的某个对象控制。随着对象被操纵(通过一些内部组件点击),整个视图折叠到高度为 0。
我尝试通过 ngStyle、ngClass、plain ol'javascript 应用视图更改 - 但没有任何效果。第二个奇怪的事情 - 处理外部组件的组件样式非常有效。
对象
const valueMap = {
width: '100%',
...
}
伪组件树
<component-a>
<component-b [ngStyle]="{'width': valueMap.width} [valueMap]="valueMap">
<div (click)="changePosition()">Button</div>
</component-b>
</component-a>
方法
changePosition() {
this.valueMap.width = this.valueMap.width==='100%' ? '50%' : '100%';
}
我真的希望组件 b 折叠到 50% 的宽度,但高度不会折叠到零。我可以在代码中看到,当我单击按钮时,样式将应用于元素 - 如果在 Chrome DevTools 中我停用应用的样式并再次激活它,它会正确显示。从来没有过这样的事情。有人可以帮忙吗?
提前致谢。安德烈
【问题讨论】:
-
您应该使用双向绑定 [(valueMap)]="valueMap".. 我看不到代码的其他部分,但我想您应该将 display:block 设置为 component- b 如果您想将该宽度用作相对宽度,则与 comp-a 相同。
-
我明白你的意思,但是双向绑定没有帮助,因为组件 b 不能直接编辑自己,比如输入字段或其他东西。
-
在你的伪组件树中,ngStyle 有点奇怪。它是否准确反映了您在代码中使用它的方式?
-
在
component-b内考虑valueMap作为输入参数@Input() valueMap: any;将ngStyle 放入component-b html main wrapper div<div [ngStyle]="{width: valueMap.width}"></div>
标签: javascript angular angular7