Angular 角度-在“订阅”中更改值后,视图中的变量不会更新
如果我这样做: component.html myService.service.tsAngular 角度-在“订阅”中更改值后,视图中的变量不会更新,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
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'}}