Angular - 未更新组件的动态大小
Angular - Dynamic size of component not being updated
我正在使用内部私有可重用组件。我的问题是当视口更新时宽度没有动态更新。以下是相关代码片段:
component.ts
export class Component {
modalWidth: string | undefined;
ngOnInit() {
this.breakpointServiceSubscription$ = this.breakpointService.breakpoint$.subscribe(() => {
if (this.breakpointService.isSmall()) {
console.log("small")
this.modalWidth = "50px";
}
else {
this.modalWidth = "500px";
}
}
}
component.html
<modal [width]="modalWidth">...</modal>
宽度和高度应该会随着浏览器大小的调整而动态变化,但它会保持与渲染时相同的大小。如果我在特定视口中打开模态框,大小始终正确,这只是我尝试在打开模态框的情况下调整大小时的问题。
登录断点服务订阅时,总是正确的,会动态记录。
我已经尝试将 modalWidth 和 modalHeight 转换为可观察对象并在 html 中使用异步管道,但它仍然具有相同的行为。
有什么提示或建议吗?
您可以在组件中注入 ChangeDetectorRef
并在更改 modalWidth 后调用 changeDetectorRef.detectChanges()
让 angular 立即将更改应用到视图。
constructor(private cdr: ChangeDetectorRef) {}
ngOnInit() {
this.breakpointServiceSubscription$ = this.breakpointService.breakpoint$.subscribe(() => {
if (this.breakpointService.isSmall()) {
console.log("small")
this.modalWidth = "50px";
}
else {
this.modalWidth = "500px";
}
// apply change immediately
this.cdr.detectChanges();
}
我正在使用内部私有可重用组件。我的问题是当视口更新时宽度没有动态更新。以下是相关代码片段:
component.ts
export class Component {
modalWidth: string | undefined;
ngOnInit() {
this.breakpointServiceSubscription$ = this.breakpointService.breakpoint$.subscribe(() => {
if (this.breakpointService.isSmall()) {
console.log("small")
this.modalWidth = "50px";
}
else {
this.modalWidth = "500px";
}
}
}
component.html
<modal [width]="modalWidth">...</modal>
宽度和高度应该会随着浏览器大小的调整而动态变化,但它会保持与渲染时相同的大小。如果我在特定视口中打开模态框,大小始终正确,这只是我尝试在打开模态框的情况下调整大小时的问题。
登录断点服务订阅时,总是正确的,会动态记录。
我已经尝试将 modalWidth 和 modalHeight 转换为可观察对象并在 html 中使用异步管道,但它仍然具有相同的行为。
有什么提示或建议吗?
您可以在组件中注入 ChangeDetectorRef
并在更改 modalWidth 后调用 changeDetectorRef.detectChanges()
让 angular 立即将更改应用到视图。
constructor(private cdr: ChangeDetectorRef) {}
ngOnInit() {
this.breakpointServiceSubscription$ = this.breakpointService.breakpoint$.subscribe(() => {
if (this.breakpointService.isSmall()) {
console.log("small")
this.modalWidth = "50px";
}
else {
this.modalWidth = "500px";
}
// apply change immediately
this.cdr.detectChanges();
}