だから私はこの超奇妙なシナリオを持っています...
1 週間前にアプリケーションを完全に正常に動作させたままにし、今日は作業を再開し、ドロップダウンが機能しなくなったことに気付きました...
私は非常に単純なコンポーネントを持っています:
import {Component, Input} from '@angular/core';
import {Card} from "../../entities/Card";
@Component({
selector: 'card-details',
templateUrl: './app/components/card-details/CardDetails.html',
})
export class CardDetailsComponent {
@Input() card: Card;
constructor() {}
}
HTML:
<template #cardDetails>
<label>{{card.cardNumber}}</label>
<br/>
<label>{{card.cardNetwork}}</label>
<br/>
<label>{{card.type}}</label>
</template>
<button class="dropdown-item" placement="right" [ngbTooltip]="cardDetails">
{{card.cardName}}
</button>
そして、親コンポーネントの関連する html コード:
<div ngbDropdown class="d-inline-block">
<button class="btn btn-outline-primary" id="dropdownMenu" ngbDropdownToggle>Choose a card..</button>
<div class="dropdown-menu" aria-labelledby="dropdownMenu">
<card-details *ngFor="let card of cards; let i = index" [card]="card" (click)="selectCard(i)"></card-details>
</div>
</div>
現在、カードのプロパティを読み取れなかったというエラーが表示されますcannot read property cardName of undefined
。
もう一度言及する必要があるように感じます。コードで文字通り何も変更しませんでした。ドロップダウンは完全に機能し、すべての詳細を表示し、1 週間後に再度実行しました。
何か案は?
すべての助けを前もって感謝します。何か不足している場合はお知らせください
編集
console.log(JSON.stringify(this.card)
その上にを配置するngOnInit
と、カードがデータで満たされていることに注意してください。そのため、DB からの正しいデータで満たされていますが、それでもこのエラーが発生します。
編集2
さらに、HTML 要素を調べるとcard-details
、正しい名前を含む正確に 2 つの要素があることがわかります。では、ここで何が問題なのですか? :O
アップデート
繰り返しますが、その中にロジックが見つかりません->次で初期化しました:
let defaultCard: Card = new Card();
defaultCard.cardName = "default";
defaultCard.cardNetwork = "whatever";
defaultCard.cardNumber = 1564987;
defaultCard.type = "Debit";
ctor
および内のログngOnInit
:
ctor
{"cardName":"default","cardNetwork":"whatever","cardNumber":1564987,"type":"Debit"}
ctor
{"cardName":"default","cardNetwork":"whatever","cardNumber":1564987,"type":"Debit"}
init
{"cardNumber":208461269,"cardName":"Magic Card","cardNetwork":"American Express","type":"Credit"}
init
{"cardNumber":220319960,"cardName":"Men Card","cardNetwork":"Visa","type":"Debit"}
どうぞ、どんな洞察も私に大いに役立ちます!