私はAngular 5のコンポーネントを作成しようとしています。これはボタンの再利用可能なテンプレートを収容します。アプリのさまざまな部分でボタンはさまざまな機能を呼び出します。ボタンの指定されたインスタンスはどの関数を呼び出すか。ボタンのHTMLタグを必要な場所に作成できることは知っていますが、アプリ全体でフォーマットが一貫していることを確認できるように再利用可能なコンポーネントを作成できることを望んでいました。
エラー
Got interpolation ({{}}) where expression was expected at column 0 in
[{{functioncall}}]
成分
<div id = "button">
<button type="button" class= "btn" (click) ="{{functioncall}}" >{{label}}</button>
</div>
そしてHTML
import { Component, OnInit, Input } from '@angular/core';
@Component({
selector: 'app-button',
templateUrl: './button.component.html',
styleUrls: ['./button.component.css']
})
export class ButtonComponent implements OnInit {
@Input() label:string;
@Input() functionCall:string;
constructor() { }
ngOnInit() {
}
}
@Output
デコレータを使用して、何らかのイベント(子から親へ)を発行する必要があります
button.component.ts:
@Input() label: string;
@Output() onClick = new EventEmitter<any>();
onClickButton(event) {
this.onClick.emit(event);
}
button.component.html:
<div id = "button">
<button type="button" class= "btn" (click)="onClickbutton($event)" >{{label}}</button>
</div>
parent.component.ts
label = "button label"
functioncall(event) {
console.log('functioncall', event);
}
parent.component.html
<app-button (onClick)="functioncall($event)" [label]="label"></app-button>
例を参照してください: https://stackblitz.com/edit/angular-gghsax
@miladfmの回答に加えて、<ng-content></ng-content>
ここでは、{{label}}
、@Output
デコレータをclick
の代わりにonClick
に追加し、MouseEvent
の代わりにany
タイプを使用します。これらの変更を使用すると、ボタンコンポーネントは、使用されたときにネイティブボタンのように構文的に動作するようになります。
button.component.ts
...
@Output() click = new EventEmitter<MouseEvent>();
onClickButton(event) {
this.onClick.emit(event);
}
...
button.component.html
<div id = "button">
<button type="button" class="btn" (click)="onClickbutton($event)">
<ng-content></ng-content>
</button>
</div>
parent.component.ts
...
functioncall(e: MouseEvent) {
// do stuff
}
...
parent.component.html
<app-button (click)="functioncall($event)">Your Label Here</app-button>