你好,我基本上是 Angular 的新手,在这里我试图从服务访问一个布尔变量。一个值为 true 的布尔变量,我已在服务中声明。根据某些逻辑,我将把该服务变量更改为 false。我在几个组件中使用的那个特定变量。所以我面临着这样的问题,我分配为 true 的初始值会出现在我使用过的所有组件中,但是在更改未反映在所有组件中的值之后。服务类是这样的:
@Injectable()
export class MyService {
running: boolean = true;
}Run Code Online (Sandbox Code Playgroud)
组件 1:
export class FirstComponent {
constructor(private myService: MyService) { }
check(){
this.myservice.running = false;
}
}Run Code Online (Sandbox Code Playgroud)
组件 2:
export class SecondComponent implements OnChanges {
running;
constructor(private myService: MyService) { }
ngOnChanges(){
this.running = this.myService.running;
console.log('running', this.running);
}
}Run Code Online (Sandbox Code Playgroud)
这就是我将如何更改布尔值并从不同组件中的服务访问。我不确定这是否是正确的方法,请纠正我。
一个简单的答案怎么样:
1) 如果您使用的是 Angular v6 或更新版本,那么只需将您的服务更改为以下内容:
@Injectable(providedIn: 'root')
export class MyService {
running: boolean = true;
}
Run Code Online (Sandbox Code Playgroud)
2)搜索系统,并确保该MyService服务被NOT中列出的providers任何模块或组件的阵列。
3)更改您的组件以使用吸气剂。正如其他人所说,ngOnChanges唯一适用于@Input属性。
export class SecondComponent {
running;
constructor(private myService: MyService) { }
get running(): boolean {
return this.myService.running;
}
}
Run Code Online (Sandbox Code Playgroud)
应该这样做!
当服务中的值发生变化时,Angular 的内置变化检测将拾取更改并重新获取该值,调用 getter 并将更新后的值提供给模板。
你不会需要一个Subject或BehaviorSubject东西那么简单,因为这一点。(那些是waaaay过度使用恕我直言。)
我在这里有一个非常简单(和类似)的例子:https : //stackblitz.com/edit/angular-simpleservice-deborahk
它使用字符串,但对于布尔值的工作方式完全相同。
| 归档时间: |
|
| 查看次数: |
2915 次 |
| 最近记录: |