angular - Angular - 仅在第一次加载时触发的代码
问题描述
我在 Angular 9 中为我的应用程序创建了一个骨架结构。骨架代码在 ngAfterViewInit()
钩子中初始化。
ngAfterViewInit() {
this.showSpinner = false;
this.interval = setInterval(() => {
this.domLoaded = true;
}, 5000);
}
但是每次我加载此页面(或从任何其他路线导航后再次访问)时,它仍然会触发事件以显示骨架。我希望骨架只显示在第一个加载应用程序上。
我也用过ngAfterContentInit()
但是没用
解决方案
有很多方法可以解决这个问题(另外,我同意 Pardeep 的评论 - 你应该寻找其他方法)但坚持你的问题,尝试将状态保存在 localStorage/sessionStorage 中,以便信息是导航到您网站中的其他页面后不会丢失。所以这样的事情会起作用:
ngAfterViewInit() {
this.showSpinner = false;
if (!sessionStorage.getItem('siteInit')) {
this.interval = setInterval(() => {
this.domLoaded = true;
sessionStorage.setItem('siteInit', 'true');
}, 5000);
} else {
this.domLoaded = true;
}
}
推荐阅读
- apache-spark - 我可以在 build.sbt 中为 spark 3 和 scala 2.12 获取 neo4j 的命令(依赖项)吗?
- haxeflixel - 当我在 haxeflixel 中运行代码时,FlxG.ui.FlxButton 不起作用?
- firebase - 是否可以运行以时间或动作频率为指标的 Firebase AB 测试?
- javascript - 如何检测是否从另一个页面上的按钮访问了 URL,如果没有,将用户重定向到主页?
- java - 无法使用 ffmpeg 连接 mp4 文件
- google-apps-script - Google Script to Auto Fil Google Doc(将文本字符串转换为货币)
- azure - cosmosdb 是否更新删除记录,即使只有单个字段更改
- mysql - 存储过程的 MySQL 语法错误
- reactjs - NextJS 中的身份验证和持久化令牌
- c# - 控制器中写入行的 cshtml 选项值