处理组件和服务类中的布尔字段 - Angular 2

Jay*_*den 0 angular

你好,我基本上是 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)

这就是我将如何更改布尔值并从不同组件中的服务访问。我不确定这是否是正确的方法,请纠正我。

Deb*_*ahK 5

一个简单的答案怎么样:

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 并将更新后的值提供给模板。

不会需要一个SubjectBehaviorSubject东西那么简单,因为这一点。(那些是waaaay过度使用恕我直言。)

我在这里有一个非常简单(和类似)的例子:https : //stackblitz.com/edit/angular-simpleservice-deborahk

它使用字符串,但对于布尔值的工作方式完全相同。