Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 检测角度测量值的变化_Angular_Angular7_Angular8 - Fatal编程技术网

Angular 检测角度测量值的变化

Angular 检测角度测量值的变化,angular,angular7,angular8,Angular,Angular7,Angular8,我正在处理一个角度应用程序。我有一些屏幕。我有一个变量,它的值总是整数。对于某些屏幕,此变量值为1,对于某些屏幕,此变量值为2 我想检测这个变量的变化。例如,对于屏幕1,myVal为1,对于屏幕2,myVal变为2,对于屏幕5,myVal再次变为1。我想在myVal值从1变为2时打开一个弹出窗口。我面临的问题是,当我在屏幕4上时,当我从rabbitMq发送响应时,myVal的值立即变为1,如果条件未执行,则弹出窗口 我该怎么做呢?假设您有一个服务-记住,在应用程序的整个运行过程中,服务是共享的

我正在处理一个角度应用程序。我有一些屏幕。我有一个变量,它的值总是整数。对于某些屏幕,此变量值为1,对于某些屏幕,此变量值为2

我想检测这个变量的变化。例如,对于屏幕1,myVal为1,对于屏幕2,myVal变为2,对于屏幕5,myVal再次变为1。我想在myVal值从1变为2时打开一个弹出窗口。我面临的问题是,当我在屏幕4上时,当我从rabbitMq发送响应时,myVal的值立即变为1,如果条件未执行,则弹出窗口


我该怎么做呢?

假设您有一个服务-记住,在应用程序的整个运行过程中,服务是共享的

@Injectable({
  providedIn: 'root',
})
export class DataService {

  variableChange=new Subject<number>()
  constructor() { }

  sendValue(value)
  {
    this.variableChange.next(value)
  }
}
接收来自任何其他组件的更改,该组件也将服务注入构造函数中,并进行下一步操作

 this.dataService.variableChange.next(value)
如果需要,可以在下面的方式中使用变量的getter

_variable;
get variable()
{
     return this._variable
}
set variable(value)
{
     this._value=value;
     this.dataService.variableChange.next(value)
}

//an instruction like
this.variable=2 //execute the variableChange
(*)例如,我们可以有一个main.app来注入构造函数并订阅

我们的主要部件可以是

<ng-container ngIf="variable==2">
   <app-header></app-header>
</ng-container>

<router-outlet></router-outlet>

variable:number 
ngOnInit()
 {
    this.dataService.variableChange.pipe(
        distinctUntilChanged())
        .subscribe(res=>{
            this.variable=res
        })
 }
当在路由器出口中加载时,将显示“应用程序标题”。如果输出组件有一个按钮

   <button (click)="click()">
   click()
   {
       this.dataService.variableChange.next(0)
   }

单击()
{
this.dataService.variableChange.next(0)
}

单击按钮时,“应用程序标题”消失

使用带有更改处理程序的NgModel。使用Observable并订阅更改。另外,请添加一些相关的代码来回答这个问题,而不是评论,所以如果我只使用这些getter和setter,那么我就不需要使用observable。对吗?请你再详细解释一下这句话“从任何其他组件接收一个更改,该组件也在构造函数中注入了服务,并做出下一个”我需要在这里放置下一个声明,在这之后我更新了答案,我希望“解释”更清楚
ngOnInit()
{
   this.dataService.variableChange.next(2)
}
   <button (click)="click()">
   click()
   {
       this.dataService.variableChange.next(0)
   }