我正在尝试在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() {
}
}
答案 0 :(得分:5)
你必须使用@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>
答案 1 :(得分:0)
除了@miladfm答案外,建议您在此处使用<ng-content></ng-content>
指令传递内容,而不要拉入{{label}}
,而是将@Output
装饰器分配给{{1} }代替click
,并使用onClick
类型代替MouseEvent
。使用这些更改将使按钮组件在使用时在语法上更像本机按钮:
button.component.ts
any
button.component.html
...
@Output() click = new EventEmitter<MouseEvent>();
onClickButton(event) {
this.onClick.emit(event);
}
...
parent.component.ts
<div id = "button">
<button type="button" class="btn" (click)="onClickbutton($event)">
<ng-content></ng-content>
</button>
</div>
parent.component.html
...
functioncall(e: MouseEvent) {
// do stuff
}
...
答案 2 :(得分:0)
可重复使用的组件-对我有用
我已将按钮创建为可重复使用的组件
button.component.html
button.component.ts
export class ButtonComponent {
@Input() label: string;
@Output() onClick = new EventEmitter<any>();
constructor() {}
onClickButton(event) {
this.onClick.emit(event);
}
}
user.component.html
<应用程序按钮(click)=“ functioncall($ event)” [label] =“ label”>
user.component.ts
label ='Hello World';