javascript - Angular 2 - 为什么动态组件的绑定(bind)被破坏?

标签 javascript jquery angular typescript

动态生成组件

var componentFactory = this.componentFactoryResolver.resolveComponentFactory(TransportOrderComponent);

let dynamicComponent = this.container.createComponent(componentFactory);

动态组件中的属性绑定(bind)不起作用。 (例如 ngIf、按钮点击……)

组件 html:

<button (click)="show = !show">toggle: {{show ? 'hide' : 'show'}}</button>
<br>
<div *ngIf="show"> Text to show</div>

组件 typescript :

...
export class TransportOrderComponent {
  show: boolean = true;
}

作为静态组件一切正常。如果我添加动态组件并单击静态组件按钮,动态组件的内容将更改一次

enter image description here

这是一个plunkr

最佳答案

那是因为您在 Angular 区域之外运行代码。

这应该适合你

constructor(private zone: NgZone, ...) {}

addTransportOrderComponent(jqContainer: any) {
  this.zone.run(() => {
     let componentFactory = this.componentFactoryResolver.resolveComponentFactory(TransportOrderComponent);
     let dynamicComponent = this.container.createComponent(componentFactory);
  })
}

Modified Plunker

关于javascript - Angular 2 - 为什么动态组件的绑定(bind)被破坏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43653952/

相关文章:

javascript - 内容保留在粘性标题下

javascript - 是的 - 逗号后允许两位数字,小数点的最小值和最大值

javascript - scrollTop() 的公认标准是什么?

NGX 数据表上的 Angular 2 Pipe ShortDate

angular - 在 Angular2 中,抑制找不到图像的 chrome 控制台错误

javascript - ASP.NET MVC ActionResult 如何返回数据以响应 GET 请求

javascript - 当进程在后台运行时,如何在 Android Chrome 中禁用音频播放?

javascript - HTML5 map 不会调用弹出窗口

jquery - 使用 $.ajax POST 实现 $.when

Angular2 动态显示 ngModel 中使用的字符串/键?