有趣的问题,所以请阅读到最后。我想要实现的是在另一个 js 文件中分离模板并在需要时延迟加载它。在 React 生态系统中做同样的事情,但是模板不行!分类回购https://github.com/pranav-js/triage-repo
我在另一个 .js 文件中有我的 tsx 模板说
template-three.js有简单的 onClick ,它只会发出警报
import { h } from '@stencil/core';
export const template_three = () => {
return <button onClick={() => alert()}>Template three here</button>;
};
当我尝试通过像这样导入 component-two.tsx 来调用此方法时
import { Component, Fragment, h, Host, State } from '@stencil/core';
@Component({
tag: 'component-two',
styleUrl: 'component-two.css',
shadow: true,
})
export class ComponentTwo {
@State() showComponentOne: any;
method: any;
template: string = '';
constructor() {}
componentWillRender() {
this.fetchComp(2);
}
// lazy load template when needed based on type passed
fetchComp(type) {
let this_ = this;
switch (type) {
case 0:
import('./template').then(module => {
this.showComponentOne = module.template_one;
});
break;
case 1:
import('./template-two').then(module => {
this.showComponentOne = module.template_two;
});
break;
case 2:
import('./template-three').then(module => {
this.showComponentOne = module.template_three;
);
break;
default:
break;
}
}
clicked() {
alert();
}
methodHere() {}
// check if template received then simply call that method with this attached
render() {
let this_ = this;
return this.showComponentOne ? this.showComponentOne.apply(this) : <div></div>;
}
}
查看呈现,但事件侦听器不起作用:/,甚至不是简单的警报 :(。当我检查时,我没有看到任何附加到按钮的事件。但是,如果我保留在组件类中的相同功能,它可以工作:(! !!
你能告诉我我在这里做错了什么吗?
我不能只在组件中保留模板,因为我有许多 UI 用于相同的逻辑。到目前为止,我在互联网上没有任何方法,这个答案对将 自定义模板传递给模板组件也无济于事