2017-10-10 76 views
1

我的代码如下所示:ngif保持假的,即使它的值是正确

component.ts

export class ViewScaleComponent implements OnInit { 
    private range$: Observable<number>; 
    constructor(private store: Store<AppState>) {} 

    ngOnInit() { 
     this.range$ = this.store.select(x => x.view.range); 
    } 
} 

component.html:

<div *ngIf="(range$ | async)"> 
    here {{ range$ | async }} 
</div> 

股利留在评论DOM,一个角度的鬼魂。

如果我删除ngif,则会出现div,但数据插值不会提取任何内容(仅此处和下面的空格出现)。

如果ngOnInit()我做的:

this.range$ = this.store.select(x => x.view.range).do(x => console.log(x)); 
console.log("on init " + this.range$); 

然后我得到:

on init [object Object] 
undefined 
21 

其中最后两个控制台日志来自同一行(do())。我想知道第一个undefined是不是显示di的原因。

值得一提的是,有时工作(我看到了div和预期正在更新的range$值)。

任何想法?

PS:我读了angular 2 ngIf with observable?,但可观察的和async的组合看起来很像我的。

+0

请张贴正确的语法。我在这里看到'* ngif =“range $ | async)”'至少有两个错误 – yurzui

+0

如果你提供了一个最小的再现 – yurzui

+0

我很喜欢用Plunker @yurzui尝试,但是我很难模拟存储服务数据。我应该注意到我是初学者。 – gsamaras

回答

1

你不需要的ngIf这只是把{{ range$ | async}}

更新

range:any ; 
ngOnInit() { 
    this.store.select(x => x.view.range).subscribe(x => this.range = x); 
} 

模板

<div *ngif="range"> 
    here {{ range }} 
</div> 
+0

如果我不使用'ngif','div'会出现,但数据插值将是空的。另外,在你的答案中,“范围”是什么? – gsamaras

+0

你从组件获得的范围,如果你不想让div出现使用'ng-container' –

+0

看到我更新的答案。但是我只有在那里有一个可观察的'范围$'。嗯,你对ng容器意味着什么?我是初学者,你能举个例子吗? – gsamaras

相关问题