[英]Angular - How to create global functions?
我刚开始学习 Angular,它似乎与我学习的第一个 JS 框架/库 React 有点不同。
这周我看了一些课程,我想我应该写一些代码,看看它能让我走多远,测试我学到的东西。 您可能会认出该应用程序,因为它是 Frontend Mentor 上列出的挑战之一,我已经在 React 中完成了这项工作,因此我也想在 Angular 中试一试。
这是我到目前为止所做的。 https://i.imgur.com/HbrndxR.png
Atm,我没有从 API 获取数据,因为我还不知道如何。 但是,我想做的是:
export class ThemeService {
isLightTheme:boolean = true;
changeTheme():void {
this.isLightTheme = !this.isLightTheme;
}
}
我所做的是将标题中的按钮链接到 changeTheme() 函数
TS
changeTheme():void {
this.themeService.changeTheme();
this.isLightTheme = this.themeService.isLightTheme;
}
HTML
<button (click)="changeTheme()">...</button>
但我不知道如何监听服务中这个 isLightTheme 属性的变化,并将其应用到需要知道应用哪个主题的其他组件。
最好的方法是使用 rxjs 库中的 BehaviourSubject
代码如下所示:
export class ThemeService {
public isLightTheme: BehaviorSubject<boolean> = new BehaviorSubject(true);
changeTheme():void {
this.isLightTheme.next(!this.isLightTheme.getValue());
}
}
然后,在你的组件中,你可以像这样订阅 isLightTheme 的值:
themeService.isLightTheme.subscribe(val=>{
//do something with val
});
方案一:最好的办法是使用NgRX状态管理来存储这类信息。 可以在应用程序的其他部分共享。 一个地方的任何更新都可以一次更新整个应用程序。
解决方案2:使用@Input 和@Output 装饰器在组件之间共享信息,
你可以在这里看到一个例子https://indepth.dev/posts/1218/lets-implement-a-theme-switch-like-the-angular-material-site
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.