ngOnChanges()中未更新Angular2私有变量

ngOnChanges()中未更新Angular2私有变量,angular,Angular,我有一个奇怪的问题,好几个小时都解决不了 在我的组件中,我有: @Input() content : string; private contentPreview : any; ngOnChanges(changes: SimpleChanges) { this.contentPreview = changes['content'].currentValue; console.log(changes['content'].currentValue); // <--

我有一个奇怪的问题,好几个小时都解决不了

在我的组件中,我有:

@Input() content : string;

private contentPreview : any;

ngOnChanges(changes: SimpleChanges)  {
    this.contentPreview = changes['content'].currentValue;
    console.log(changes['content'].currentValue);   // <-- WORKS
}
@Input()内容:字符串;
私人内容预览:任何;
ngOnChanges(更改:SimpleChanges){
this.contentPreview=更改['content'].currentValue;

console.log(changes['content'].currentValue);//我实际上无法重现您的问题。但是您可以尝试使用强制更新,因为您说
console.log
正在工作,所以这意味着至少调用了钩子,但出于某种原因它没有更新DOM。因此,请尝试:

在子组件中:

import {NgZone} from '@angular/core'
将其注入构造函数:

constructor(private ngZone: NgZone) { }
然后在您的
更改中

ngOnChanges(changes: SimpleChanges) {
   this.ngZone.run(() => this.contentPreview = changes['content'].currentValue;) 
}

这里有一个

这可能是因为更改检测周期已经结束。因此,对“内容”的单个更改会触发onChanges钩子,它会更新contentPreview变量,但这是更改检测周期的结束,因此在此之后不会更新DOM。您可能可以使用doChec解决此问题k hook,在这里找到更多信息:Mike,谢谢!我得到了循环点。但是,我尝试在另一个事件后显示私有变量(例如,单击组件)值没有被存储。这是它应该如何工作的吗?Mike,在ngDoCheck中,我可以看到包含正确内容的变量。但是如何刷新组件以显示它?嗯…你能发布你的模板吗?谢谢你的时间!我在Chrome中看到的是,内容实际上被放入了“ng-reflect-content-t”中在组件中。组件仍然包含初始值。你对此有什么想法吗?嗯。你能尝试在plunker中重现这个问题吗?你可以用我提供的版本,我很乐意看一看:)我的脚本看起来很像你的,但模板没有呈现。相反,数据存储在ng refle中ct variablenameI创建了生产文件,它确实有效。我只在localhost:3000上看到这个问题。你知道有什么问题吗?