【问题标题】:Inputs was not working by dynamic component动态组件无法使用输入
【发布时间】:2019-04-11 04:40:01
【问题描述】:

我使用 ndc-dynamic 实现了创建动态组件。

它对输出非常有效,但输入不起作用。

我会展示我的代码。

 <ng-container *ngComponentOutlet="item.widgetComponent; ndcDynamicInputs: inputs; ndcDynamicOutputs: outputs">

在ts文件中

 aButtonDisabled: boolean;
  bButtonDisabled: boolean;
  inputs = {
    disabledAView: this.aButtonDisabled,
    disabledBView: this.bButtonDisabled
  };

这两个代码在父组件中。

子组件:

 @Input() disabledVehicleAView: boolean;
  @Input() disabledVehicleBView: boolean:

在 HTML 中

  <mat-grid-tile>
        <button [disabled]="disabledVehicleBView">
       </button>
      </mat-grid-tile>
      <mat-grid-tile>
        <button  [disabled]="disabledVehicleAView">
          </button>
      </mat-grid-tile>

我做错了吗?

有什么解决办法吗?

最好的问候,

狮子座

【问题讨论】:

  • 你能在 stackblitz.com 上创建复制品吗?我猜您需要在设置输入后手动调用更改检测。

标签: angular angular-dynamic-components


【解决方案1】:

每当this.aButtonDisabledthis.bButtonDisabled 的值发生变化时,您都需要重新分配inputs 的值。

您的主要静态组件 - HTML

<input type="checkbox" class="example-margin" [(ngModel)]="aButtonDisabled" (ngModelChange)="onAButtonChange($event)"/>aButtonDisabled 
<input type="checkbox" class="example-margin" [(ngModel)]="bButtonDisabled" (ngModelChange)="onBButtonChange($event)"/>bButtonDisabled

<ng-container 
               *ngComponentOutlet="component; 
               ndcDynamicInputs: inputs; 
               ndcDynamicOutputs: outputs"></ng-container>

您的主要静态组件 - TS

onAButtonChange() {
    console.log(this.aButtonDisabled)
    this.inputs = {
      ...this.inputs,
      ...{ disabledVehicleAView: this.aButtonDisabled }
    }
  }

  onBButtonChange() {
    console.log(this.bButtonDisabled)
    this.inputs = {
      ...this.inputs,
      ...{ disabledVehicleBView: this.bButtonDisabled }
    }
  }

onAButtonChangeonAButtonChange 方法可以在用户更改控件的值时调用,例如复选框的onChange 事件。在您的情况下,它可能不是一个复选框,但是您可能会更改 this.aButtonDisabled 的值,当时还调用 onAButtonChange() 方法

Working Demo

【讨论】:

  • 我已经尝试过您的解决方案,但它不起作用。
  • 你能添加一个工作样本吗?希望你有&lt;/ng-container&gt; 的关闭。它在这里工作:stackblitz.com/edit/…
  • 是的,这个例子我也找到了,像这个例子我已经完全实现了。
  • 我试过了,如果我用 aButtonDisabled 更改了代码:boolean; bButtonDisabled:布尔值;输入 = { disabledAView: true, disabledBView: ture };它有效
  • 我认为输入无法监听变量的变化
猜你喜欢
  • 2011-11-10
  • 1970-01-01
  • 2014-07-17
  • 2023-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-13
  • 2016-04-03
相关资源
最近更新 更多