コンポーネントクラスが少し大きくなっているangular2アプリケーションがあります。 「Handler」クラスを含むフォルダを作成することに決めました。そのため、関連するコードを各ハンドルクラスに入れることができました。私のコンポーネントクラスでは、私はその後、各ハンドラのインスタンスを作成して、テンプレートにこれらを使用角2 - テンプレートループの呼び出しクラスメソッド* ngFor
マイコンポーネント:
export class DesignerComponent {
public tab: TabHandler = new TabHandler(this);
マイハンドラ:
export class TabHandler {
public designerComponent: DesignerComponent;
constructor(designerComponent: DesignerComponent)
{
this.designerComponent = designerComponent
}
add() {
if (this.designerComponent.formModel.tabs.length < 1) {
this.designerComponent.formModel.tabs.push(new TabModel("Tab"));
}
this.designerComponent.formModel.tabs.push(new TabModel("Tab"));
}
マイテンプレート:
<li *ngFor="let tab of formModel.tabs; let i = index; ">
<a href="#" [ngClass]="{'tab-selected': formModel.currentTab == tab}"
class="tab-button"
attr.contenteditable="{{formModel.currentTab == tab}}"
(blur)="tab.changeShortTitle($event)"
(dragover)="allowDrop($event,'tab')"
(dragstart)="drag($event,i,'tab')"
(drop)="drop($event,i)"
(dragleave)="dragleave()"
(click)="tab.select(tab)">
{{tab.shortTitle}}
</a>
</li>
<li id="add-tab-buttonholder">
<a href="#" (click)="tab.add()"><i class="fa fa-plus" aria-hidden="true"></i></a>
</li>
最後の<li id="add-tab-buttonholder"> <a href="#" (click)="tab.add()
は* ngForループの外にあるため動作します。
私はあなたのループ変数がTabHandler
と同じ名前を持つクラスで空の関数を作成し、loppでそれを呼び出そうとしましたが、それはまた、同じエラーメッセージで失敗し
ORIGINAL EXCEPTION: TypeError: self.context.$implicit.select is not a function
テンプレートを変更する必要があります。 'add()'の代わりに 'tab.add()'を呼び出す必要があります。テンプレートを見ることなく、これは答えにくい – PierreDuc
私はtab.add()を使用します –