【问题标题】:ngif stays false, even though its value is rightngif 保持假,即使它的值是正确的
【发布时间】:2018-03-21 10:10:06
【问题描述】:

我的代码如下所示:

组件.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>

div 仍然在 DOM 中被注释,一个 Angular Ghost。

如果我删除 ngifdiv 会出现,但数据插值不会获取任何内容(仅在此处出现以下空白)。

如果在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的原因。

值得注意的是,有时它可以工作(我看到divrange$ 的值正在按预期更新)。

有什么想法吗?

PS:我读过 angular 2 ngIf with observable?,但 observable 和 async 的组合看起来和我的很相似。

【问题讨论】:

  • 请发布正确的语法。我在这里看到*ngif="range$ | async)"至少有两个错误
  • 如果您提供一个最小的复制将很容易为您提供帮助
  • 我尝试使用 Plunker @yurzui,但我很难模拟提供数据的商店。我应该注意我是初学者。
  • 我可以帮助你,只需将你的代码添加到 plunker plnkr.co/edit/CeoF3g2aTmasGZppQ9CC 并点击 Fork

标签: html angular typescript redux store


【解决方案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>

【讨论】:

  • 如果不使用ngif,会出现div,但是数据插值是空的。另外,在您的回答中,range 是什么?
  • 你从组件中得到的范围,如果你不想让 div 出现使用ng-container
  • 查看我的更新答案。但我只有一个可观察的range$。嗯,你对 ng 容器是什么意思?我是初学者,可以举个例子吗?
  • 范围是可观察的,使用异步过滤器将其变成热可观察的,以便它可以发出数据,或者如果您感到困惑,您可以订阅存储并获取更好的数据正如你提到的,你是一个初学者,你应该采取一些小步骤。更多关于ngcontainer
  • 哦,对不起,我完全忘记了变量应该是 range$ 而不是 range 我的错
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多