Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

同一个插件 重复注册 引起的bug #42

Closed
Alessandro-Pang opened this issue Aug 9, 2023 · 1 comment
Closed

同一个插件 重复注册 引起的bug #42

Alessandro-Pang opened this issue Aug 9, 2023 · 1 comment

Comments

@Alessandro-Pang
Copy link

同一个插件 重复注册 引起的bug

由于在 run 方法中传入 config, 在 onLeafer 中想要使用,只能通过挂载到当前插件对象上实现

示例代码

export const plugin: IPlugin = {
    name: PLUGIN_NAME,
    importVersion: '1.0.0-beta.8',
    import: ['LeaferTypeCreator', 'LeaferEvent', 'PointerEvent'],
    config: null,
    run(LeaferUI: IObject, config: UserConfig): void {
        // config 挂载到当前对象
        this.config = config;
    },
    onLeafer(leafer: ILeafer) {
       // onLeafer 中拿到 config
       console.log(this.config)
    },
};

run 函数中,将获取的 config 挂载到当前插件上

如果这个插件只会使用一次没有问题,如果当注册多次时会覆盖之前的插件参数

image

由于在 plugin 实现中,直接使用了用户传入的对象,在 run 函数执行时所有相同插件对象的 this 指向的都是同一个,这就造成了即便 config 不同,也只有最后配置一个生效的问题。

异常代码示例

// 第一个插件:指定圆形触发事件
usePlugin(plugin, {
  includeTypes: ["Ellipse"],
  getContent(node) {
    const dom = `
      <ul style="list-style: none; margin: 0; padding: 0; color: #333">
        <li>节点类型:${node.tag}</li>
        <li>宽度:${node.width}</li>
        <li>高度:${node.height}</li>
      </ul>
    `;
    return dom;
  },
});
// 此时打开控制台,检查 `PluginManager.list` , config 是正常的

// -----------------------------------------------------------------------------

// 注册第二个插件:参数发生修改
// 指定矩形触发事件,此时会讲上面的参数覆盖,圆形将不会触发事件
usePlugin(plugin, {
  includeTypes: ["Rect"],
  getContent(node) {
    const dom = `
      <ul style="list-style: none; margin: 0; padding: 0; color: #333">
        <li>节点类型:${node.tag}</li>
        <li>x:${node.x}</li>
        <li>y:${node.y}</li>
      </ul>
    `;
    return dom;
  },
});

// 此时打开控制台,检查 `PluginManager.list` 会发现第一个插件的 `config` 变为第二个注册的参数

Leafer UI版本:

  • 1.0.0-beta.8'

可复现地址:

复现步骤:

预期应当同时触发 两个插件

@leaferjs
Copy link
Owner

收到,谢谢反馈~, 插件的应用范围是全局的,默认情况下最好只能注册一次,多次可能会引发很多其他问题,包含管理,我们后面会做限制。

如果想要有多个自定义的内容生效,可以通过在插件上挂载自定义的方法实现,例如: plugin.addConfig(), plugin上可以自由挂载自定义的类、方法、属性, 插件本身的变量名也可以自由定义~

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants