Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/181.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_Rxjs_Observable - Fatal编程技术网

Angular 角度-在“订阅”中更改值后,视图中的变量不会更新

Angular 角度-在“订阅”中更改值后,视图中的变量不会更新,angular,rxjs,observable,Angular,Rxjs,Observable,如果我这样做: component.html myService.service.ts import { Injectable } from "@angular/core"; import { BehaviorSubject } from "rxjs"; @Injectable() export class MyServiceService { decimalNumberEmitter$ = new BehaviorSubject<number>(0.0); startE

如果我这样做:

component.html

myService.service.ts

import { Injectable } from "@angular/core";
import { BehaviorSubject } from "rxjs";

@Injectable()
export class MyServiceService {
  decimalNumberEmitter$ = new BehaviorSubject<number>(0.0);

  startEmitting() {
    for (let index = 1; index < 11; index++) {
      this.decimalNumberEmitter$.next(index / 10);
    }
  }
}
此外,我还尝试手动检测更改,但也没有成功-类似于以下内容:

constructor(private cd: ChangeDetectorRef) {}
...
... .subscribe( () => {
       [my code]
       this.cd.markForCheck();
    }
任何人都可以对此有所了解??提前感谢您的帮助

效果不错,但我看不出有什么不同,哈哈

这是代码以防万一

服务台

import { Injectable } from "@angular/core";
import { BehaviorSubject } from "rxjs";

@Injectable()
export class MyServiceService {
  decimalNumberEmitter$ = new BehaviorSubject<number>(0.0);

  startEmitting() {
    for (let index = 1; index < 11; index++) {
      this.decimalNumberEmitter$.next(index / 10);
    }
  }
}
component.html:

<input type="button" (click)="emit()" value="Click to start emitting!">
{{decimalNumber | number:'1.1-1'}}

我刚刚更改了输入,以获取一个值,也可以使其类似。

尝试在模板中使用流,那么您根本不需要使用ngOnInit.myService.decimalnumbermitter$.subscribe

点击开始发射! {{小数|数:'1.1-1'}
您是否已将ChangeDetection设置为OnPush?您的数字管道正在将其设置为0而不是0。0@MichaelD我按照你的建议换了它,现在它可以正常工作了!我想我必须学习更多关于角度变化检测的知识。非常感谢你,我真的很感激!!嗯,这很奇怪,正如我在上面的评论中回答的那样,在我按照Michael的建议使用changeDetection:ChangeDetectionStrategy.OnPush之前,我无法实现这一点。在那次改变之后,它开始为我工作。但无论如何,谢谢你的努力和帮助,干杯!您的代码中一定有不同的内容。我没有改变复制的策略。也许您可以在问题中添加更多代码,以便我们检查?因为改变策略看起来更像是一个肮脏的解决方案,而不是问题的真正答案
constructor(private cd: ChangeDetectorRef) {}
...
... .subscribe( () => {
       [my code]
       this.cd.markForCheck();
    }
import { Injectable } from "@angular/core";
import { BehaviorSubject } from "rxjs";

@Injectable()
export class MyServiceService {
  decimalNumberEmitter$ = new BehaviorSubject<number>(0.0);

  startEmitting() {
    for (let index = 1; index < 11; index++) {
      this.decimalNumberEmitter$.next(index / 10);
    }
  }
}
import { Component, OnInit } from "@angular/core";
import { MyServiceService } from "./my-service.service";

@Component({
  selector: "my-app",
  templateUrl: "./app.component.html",
  styleUrls: ["./app.component.css"]
})
export class AppComponent implements OnInit {
  decimalNumber;
  constructor(private _myService: MyServiceService) {}

  ngOnInit() {
    this._myService.decimalNumberEmitter$.subscribe(val => {
      this.decimalNumber = val;
      console.log("decimalNumber = ", this.decimalNumber);
    });
  }

  emit() {
    this._myService.startEmitting();
  }
}
<input type="button" (click)="emit()" value="Click to start emitting!">
{{decimalNumber | number:'1.1-1'}}