【发布时间】:2018-03-20 00:08:18
【问题描述】:
在下面的代码中,如您所见,我订阅了一个 observable,在回调中我将 status 设置为 result 的值。这用于视图上的 *ngIf。事实是,即使返回 true,视图也不会更新。
export class AppComponent {
private status;
constructor (private proxyService: ProxyService) {
}
ngOnInit(){
//setInterval(()=>console.log(this.isInjected),1000);
this.proxyService.someObservable.subscribe((result)=>{
this.status = result;
console.log(result);
});
}
}
现在,您可能会注意到注释行。在调试时我添加了它,奇怪的是它使视图更新。任何想法为什么?
仅供参考,这是我的看法:
<div *ngIf="status">
<app-userlane-inject></app-userlane-inject>
</div>
<div *ngIf="!status">
<span>Status is false.</span>
</div>
{{status}}
子组件永远不会被渲染,字符串插值即使在控制台记录为真时也保持假(除非有间隔,那么它可以工作)。
从广义上讲,该服务的作用如下:
var mySubject= new BehaviorSubject(false);
@Injectable()
export class ProxyService {
public someObservable= mySubject.asObservable();
//Kinda deep callback tree, then finally
mySubject.next(true)
}
只是一些额外的信息来将答案放入上下文中:我上面提到的深度回调链完全脱离了角度(这是一个扩展,调用链包括向内容脚本发送消息,然后到页面,以及一路回来)。 这就是为什么需要再次调用角区。 我不知道这是原因,这就是为什么我没有在我最初的问题中包含这个原因。
【问题讨论】:
-
你不需要
var me = this;。只需使用this.status = result; -
什么是
ProxyService?你能分享一些代码吗? -
console.log(result) 的输出是什么;
-
输出为真,就是这样
-
这很方便@jason.kaisersmith,谢谢。这就是我添加间隔控制台日志时尝试做的事情,但这解决了问题哈哈。可能是 ngZone 的事情,我对此一无所知。
标签: angular