angular - TemplateRef 和点击事件
问题描述
我有一个用于不同组件的通用模板,但有一些按钮。因此,我创建了一个通用组件并使用 ng-template 更改此按钮:
<component-common
[buttonTemplate]="buttonTemplate">
</component-common>
<ng-template #buttonTemplate let-element="element" let-method>
<button (click)="method">
element.name
</button>
</ng-template>
在 component-common.component.ts 中:
export class ComponentCommonComponent {
@Input() buttonTemplate: TemplateRef<any>;
constructor() { }
test() {
console.log("test called");
}
}
在html中:
<ng-template
*ngTemplateOutlet="buttonTemplate;context: {method: test(), element:element}">
</ng-template>
我发现的问题是“测试”一直被调用,我只想在点击时调用它,我错过了什么?
解决方案
改变
{method: test(), element:element}
至
{method: test, element:element}
您不想调用该方法,而只需要方法的引用。
同样在模板中,您应该使用let-method="method"
并将其称为method()
:
<ng-template ... let-method="method">
<button (click)="method()">
推荐阅读
- ios - PC 和 Mac 之间是否有任何键盘字符代码差异?
- java - 这段代码中序遍历有什么问题?
- javascript - 评估表示为字符串的嵌套函数调用
- android-studio - 预览被隐藏且不显示
- ios - Css 不适用于我的流星 iOS 应用程序,但在浏览器中它可以完美运行
- ionic-framework - Ionic 4 存储问题:没有存储提供者
- angular - 组件选择器不是已知元素
- typescript - 为什么可选对象成员的类型为“从不”?
- android - 如何设置 LiveData 以执行基于多个参数的搜索?
- javascript - Web Components 和 Shadow DOM 如何防止跨组件泄漏 CSS?