【发布时间】:2020-05-22 20:15:39
【问题描述】:
我正在向服务中的元素添加css 类,但更改不会立即发生。更改大约需要一秒钟来更新视图。我需要立即进行更改,不得拖延。我已经尝试过 ApplicaionRef 并在服务中调用 this.applicationRef.tick(),但这不起作用。我尝试在 NgZone 的this.zone.run 中运行该服务的方法,但也没有成功。
@Component({
selector: 'calling',
templateUrl: './calling.component.html',
styleUrls: ['./calling.component.scss']
})
export class CallingComponent {
constructor(private hidingService: HidingService) {}
callHide() {
this.hidingService.hide();
}
}
@Injectable({
providedIn: 'root'
})
export class HidingService {
constructor() {}
hide() {
const elements = document.querySelectorAll('.hideable-field');
elements.forEach(element => {
element.classList.add('hide');
});
}
}
这是 styles.css 中的 CSS(可从所有组件访问)以供参考,但这部分正在运行。添加这个“隐藏”类会隐藏带有这个 CSS 的字段:
.hideable-field {
&.hide {
visibility: hidden !important;
}
}
如果我在组件中使用这个隐藏逻辑,它就可以工作。这些字段会立即隐藏。如果我在服务中使用这个隐藏的逻辑,则需要一点时间。
【问题讨论】:
-
不确定服务与组件的滞后。但您可能想要更新您的逻辑并使用 renderer2
this.renderer.addClass(this.el.nativeElement, className);使其更具角度。同样对于这样的操作,我更喜欢对元素使用指令而不是使用 querySelectorAll 来查找元素。它更干净、更有棱角。 -
可能有很多元素具有
.hideable-field类并且迭代forEach 中的所有元素可能是导致此延迟的原因。
标签: javascript html css angular