【发布时间】:2019-05-07 07:10:21
【问题描述】:
我有一个 ReplaySubject 变量正在服务上更新,并且组件正确获取新值,但它似乎没有更新视图(HTML 中的绑定保持为空,即使变量已正确更新)。
服务:
export class ExampleService {
myVariable;
constructor(private http: HttpClient, private userModel: UserModel) {
this.myVariable = new ReplaySubject(1);
this.getApiRoot(`/api/endpoint`)
.subscribe(
data => {
this.myVariable.next(data);
},
err => {
console.log(`Database connection error: ${err}`);
},
() => { }
);
}
}
组件:
从 './example.service' 导入 { ExampleService }; 导出类 myComponent 实现 OnInit {
valueOnFrontend: string;
constructor(exampleService: ExampleService) {};
ngOnInit() {
this.exampleService.myVariable.subscribe(
function(value) {
console.log(this.valueOnFrontend);
this.valueOnFrontend = value;
},
function(error) {
console.log(err);
},
function() {
console.log("Request completed.");
}
) } }
ExampleService 的 HTML 如下:
{{ valueOnFrontend }}
所以该值在服务中被正确更新,然后它被正确地发送到组件,组件中的console.log 记录了新值,但是 HTML 绑定没有得到更新。
我读到 RxJS 在它自己的 Zone 中运行,Angular Zone 不知道其中的更新。我该如何解决这个问题,并在 HTML 中获取要更新的值?
谢谢。 :P
【问题讨论】:
-
" this.valueOnFrontend = value;"这是组件对象的引用吗?
-
@ABOS 是的,没错。就是前端变量的值。
-
显然不是,正如您在下面回答的那样。始终注意回调中“this”的范围。
-
啊,我的印象是我引用了正确的变量,但范围是错误的。现在我明白你的问题了。干杯。