我有一个带有回调函数“myCallback”的本机 Web 组件。
<script>
class MyComponent extends HTMLElement {
constructor() {
super();
this.myCallback = this.getAttribute("my-callback");
}
connectedCallback() {
this.innerHTML = "MyComponent";
const me = this;
setTimeout(function () {
const cb = me.myCallback;
if (typeof cb === "string") {
new Function(cb).call(window);
} else if (typeof cb === "function") {
cb.call(window);
} else {
console.log("not a function: " + cb);
}
}, 1000);
}
}
customElements.define("my-component", MyComponent);
</script>
我想在 Angular 中使用这个 webcomponent 并为其分配一个回调,但它似乎不起作用。这是我到目前为止所尝试的:
<my-component my-callback="angularCallback()"></my-component>
<my-component my-callback="{{angularCallback}}"></my-component>
<my-component [my-callback]="angularCallback"></my-component>
<my-component [my-callback]="angularCallback()"></my-component>
<my-component (my-callback)="angularCallback()"></my-component>
上面的第一行会抛出错误“angularCallback is not a function”,因为它不是在窗口中定义的,而是在 Angular 中定义的。其他行永远不会被调用,也不会引发任何错误。
作为一个简单的测试,我尝试了以下,它工作正常:
<my-component my-callback="console.log('test-callback');"></my-component>
有没有办法通过模板在 Angular 中分配回调?
更新解决方案
我犯的错误是我尝试[my-callback]
而不是[myCallback]
所以解决方案如下:
<my-component [myCallback]="angularCallback"></my-component>