2023-09-04 16:49:24 +08:00

60 lines
3.5 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<div>
<h1>如何开发一个插件</h1>
<p>库本身提供了一些插件如果满足不了你的需求你也可以自己开发一个新插件</p>
<p>想要开发一个插件你肯定需要对库的实现原理模块划分目录结构等等有一定了解简而言之需要你对库的源码有一定程度的熟悉所以如果还没看过现在就可以先去阅读一下好消息是本库的源码并不复杂相信你一定能看懂</p>
<p>在你决定动手之前最好先看一下内部插件是如何实现的</p>
<p>一个插件就是一个类</p>
<pre class="hljs"><code><span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">YourPlugin</span> </span>{
<span class="hljs-function"><span class="hljs-title">constructor</span>(<span class="hljs-params">{ mindMap }</span>)</span> {
<span class="hljs-built_in">this</span>.mindMap = mindMap
}
<span class="hljs-comment">// 插件被移除前做的事情</span>
<span class="hljs-function"><span class="hljs-title">beforePluginRemove</span>(<span class="hljs-params"></span>)</span> {
}
<span class="hljs-comment">// 插件被卸载前做的事情</span>
<span class="hljs-function"><span class="hljs-title">beforePluginDestroy</span>(<span class="hljs-params"></span>)</span> {
}
}
Scrollbar.instanceName = <span class="hljs-string">&#x27;yourPlugin&#x27;</span>
</code></pre>
<p>实例化插件时会传入思维导图实例你可以保存起来后续可以通过它来监听方法或调用实例的方法甚至是其他插件的方法</p>
<p>需要给插件类添加一个静态属性<code>instanceName</code>会将你的插件实例通过该属性保存到思维导图实例上外部或其他插件想要获取你的插件实例时都需要通过该属性</p>
<pre class="hljs"><code>mindMap.yourPlugin.xxx
</code></pre>
<p>插件存在两个生命周期函数</p>
<p><code>beforePluginRemove</code>生命周期会在思维导图实例调用<code>removePlugin</code>方法时调用代表思维导图实例并没有销毁只是移除该插件</p>
<p><code>beforePluginDestroy</code>生命周期会在销毁思维导图时调用此时思维导图实例也会被销毁</p>
<pre class="hljs"><code>mindMap.removePlugin(YourPlugin)
</code></pre>
<p>你也可以继承内部的一些插件</p>
<pre class="hljs"><code><span class="hljs-keyword">import</span> ScrollbarPlugin <span class="hljs-keyword">from</span> <span class="hljs-string">&#x27;simple-mind-map/src/plugins/Scrollbar.js&#x27;</span>
<span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">YourPlugin</span> <span class="hljs-keyword">extends</span> <span class="hljs-title">ScrollbarPlugin</span> </span>{
<span class="hljs-function"><span class="hljs-title">constructor</span>(<span class="hljs-params">opt</span>)</span> {
<span class="hljs-built_in">super</span>(opt)
}
}
Scrollbar.instanceName = <span class="hljs-string">&#x27;yourPlugin&#x27;</span>
</code></pre>
<p>插件的原理无非是监听一些你需要的事件然后调用一些你需要的方法来完成一些功能其实没啥好多说的建议看一下内部插件的实现</p>
<p>当你完成了一个插件后你可以考虑发布到<code>npm</code>提供给其他开发者使用</p>
</div>
</template>
<script>
export default {
}
</script>
<style>
</style>