【问题标题】:@Input() issues@Input() 问题
【发布时间】:2025-12-02 21:00:02
【问题描述】:

我正在尝试从另一个组件的变量中获取数据,但到目前为止它还没有工作。

这个想法是,当我选中一个复选框时,变量(布尔值)变为 true,并且我页面上的某些内容是可见的,反之亦然。

所以基本上我希望来自InstellingenComponent 的变量在AfdelingDetailComponent 中工作。使用 @Input() 无法正常工作...我越来越不确定了。

这是我的设置组件:

export class InstellingenComponent implements OnInit {


  toonNaam = false;
  toonTijd = false;
  toonType = false;
  toonSanitair = false;
  toonKinder = false;
  toonSalon = false;
  toonKamerNummer = false;
  hulpKleur = "red";
  behandelKleur = "orange";
  volKleur = "green";
  leegKleur = "white";

我的设置 html:(是的,它是一个对话框)

<h1 md-dialog-title>Instellingen</h1>
<div md-dialog-content>Welke gegevens wil je zien? </div>
<md-checkbox class="check-margin" [(ngModel)]="toonKamerNummer">Kamernummer</md-checkbox>
<md-checkbox class="check-margin" [(ngModel)]="toonNaam">Patiëntnaam</md-checkbox>
<md-checkbox class="check-margin" [(ngModel)]="toonTijd">Tijdstip behandeling</md-checkbox>
<md-checkbox class="check-margin" [(ngModel)]="toonType">Type behandeling</md-checkbox>
<md-checkbox class="check-margin" [(ngModel)]="toonSanitair">sanitair</md-checkbox>
<md-checkbox class="check-margin" [(ngModel)]="toonKinder">Kinderverzorgingsruimte</md-checkbox>
<md-checkbox class="check-margin" [(ngModel)]="toonSalon">Salon</md-checkbox>
<div md-dialog-actions>
  <button md-button md-dialog-close="Option 1">Sluiten</button>

 </div>
  <app-afdelingdetail
    [toonKamerNummer]="toonKamerNummer"
    [toonNaam]="toonNaam"
    [toonTijd]="toonTijd"
    [toonType]="toonType"
    [toonSanitair]="toonSanitair"
    [toonKinder]="toonKinder"
    [toonSalon]="toonSalon"
    [behandelKleur]="behandelKleur"
    [hulpKleur]="hulpKleur"
    [leegKleur]="leegKleur"
    [volKleur]="volKleur"
  >
  </app-afdelingdetail>

具有输入的另一个组件:

 export class AfdelingdetailComponent implements OnInit {

 

  @Input() toonNaam:boolean;
  @Input() toonTijd:boolean;
  @Input() toonType:boolean;
  @Input() toonSanitair:boolean;
  @Input() toonKinder:boolean;
  @Input() toonSalon:boolean;
  @Input() toonKamerNummer:boolean;
  @Input() hulpKleur;
  @Input() behandelKleur;
  @Input() volKleur;
  @Input() leegKleur;
}

还有另一个组件的 html,让您了解我想要做什么:

<div class="container" *ngIf="selectedAfdeling"
fxLayout
fxLayout.xs="column"
fxLayoutAlign="center"
fxLayoutGap="10px"
fxLayoutGap.xs="0">
  <div *ngFor="let kamer of selectedAfdeling.kamers">
    <a  [routerLink]="['/patient', kamer.id]">
      <div class="kamer" [style.width.px]="kamer.width" [style.height.px]="kamer.height"
           [style.background-color]="getColor(kamer)">
        <div *ngIf="toonKamerNummer" id="kamernummer">Kamer {{kamer.kamernummer}}</div>
        <div *ngIf="toonNaam">{{kamer.naam}}</div>
        <div *ngIf="toonType">{{kamer.behandelingstype}}</div>
        <div *ngIf="toonTijd">{{kamer.behandelingstijd}}</div>
        <div *ngIf="toonSanitair && kamer.sanitair">
          <md-icon>wc</md-icon>
        </div>
        <div *ngIf="toonKinder && kamer.kinderverzorgingsruimte"><md-icon>child_care</md-icon></div>
        <div *ngIf="toonSalon && kamer.salon"><md-icon>event_seat</md-icon></div>
      </div>
    </a>

</div>
</div>

【问题讨论】:

  • 我没有否决你的问题,但不是很清楚:对于最后一个 html 模板,你说它是用于“其他组件”,所以 *ngIf="blahblah" 是指变量 blahblah在这个“其他组件”中。
  • 对不起。我稍微编辑了我的帖子。我希望 InstellingenComponent 中的变量在 AfdelingDetailComponent 中工作。使用 @Input() 无法正常工作...我越来越不确定了。
  • 你能添加你得到的错误信息吗?
  • 我没有收到任何错误,但如果我控制台记录 AfdelingDetailComponent 中的一个可变量,我会得到未定义。
  • @KlaartjeDeBacker 谢谢。请看我的回答,我试图提供一个有效的例子。您必须小心在哪个组件中声明了哪个变量。试着看看你是否理解我的例子,以及它与你的例子有什么关系,主要检查你在html模板中使用的变量在相应的组件中是否正确声明。不要犹豫,对我的回答发表评论。

标签: javascript angular angular2-inputs


【解决方案1】:

新答案

好的,显然这是关于使用 Angular Material 复选框绑定值的方式。我尝试了 [(ngModel)] 并且我也失败了。

你应该摆脱 [(ngModel)] 绑定(恕我直言),并像这样绑定你的变量:

在您的模板中:

<md-checkbox [checked]="myVariable" (change)="myVariable=!myVariable">Check me!</md-checkbox>

不要忘记在组件中声明和初始化你的变量

myVariable: boolean = false; // or true

如果变量未初始化,它将无法正常工作。

查看此插件https://plnkr.co/edit/CFLsnh2MDreiEDXKfnXc?p=preview

感谢这个相关的问题: Angular 2 Checkbox Two Way Data Binding

这里是 Angular Material 文档: https://material.angular.io/components/component/checkbox

【讨论】:

  • 感谢您的帮助,这是一个很好的解释!但正如你所看到的,我认为我完全按照你的建议做,或者我错过了什么?我可以尝试使用不同的变量名,但不要认为这会有所作为。
  • @KlaartjeDeBacker 我同意您的布尔值,但是您尝试在模板中使用的其他变量似乎没有在任何地方声明:例如“selectedAfdeling”。
  • 我厌倦了更改第二个变量的名称,现在我得到:无法绑定到“toonKamerNummer2”,因为它不是“app-afdelingdetail”的已知属性。
  • @KlaartjeDeBacker 那是因为你没有在 app-afdelingdetail 类中更改变量的名称,我猜只是在模板中。
  • 哦,好的,我明白了,使用了新模板,但是旧变量名的旧 TS 文件没有更新。请尝试在您的模板中添加一些调试以“实时查看”变量的值。 (在您的第一个和第二个组件中)