The documentation is a work in progress, and English edition is just an empty shell for now. I will translate it when Chinese edition has done.
自定义脚本是由 .md
文件动态引入的代码文件,它们通常会随着页面的切换而挂载 / 销毁。
v-no 丰富的 API(所有 Vue 实例、export
的变量和方法、使用的依赖库……当然还有 Vue 函数和 vue-property-decorator)是支撑它的基石,通过调用它们,自定义脚本可以和 v-no 核心代码高度集成,就像是 v-no 自身的延展,各类外部插件也是通过这种方式集成到页面中。
你可以像这样引入一个自定义脚本(它是一个链接语法扩展):
v-no 会将 title
部分的字符串放到 vno.utils.waitFor
中 eval
,它会尝试无限次数,直到成功执行才引入这个脚本。因为多条自定义脚本的执行顺序并不稳定,你可以通过等待前一个脚本暴露的对象,间接控制它们的加载顺序。
另外,如果你在引用时使用多于一个的 $
标记,v-no 就会将它挂载为一个驻留脚本,不再自动销毁。
建议将你的脚本代码包裹在下面的代码块中,以避免污染全局环境。
更进一步,你还可以将它们分成一个单独的项目,用 Webpack 工具链进行构建。
这里搭好了一个脚手架(vue-loader
、ts-loader
、babel-loader
、sass-loader
)帮助你快速开始,你也可以参考本文档的脚本子模块来构建你自己的脚本。
页面组件
使用 v-no 导出的 Vue 函数编写的 Vue 单文件组件,经由自定义脚本 / 自定义样式引入到 .md
文件后,通过挂载在 Markdown 渲染的 HTML 元素上,就构成了一个 v-no 页面组件。
这里是它的几个应用:
它们位于 v-no-page-component 仓库,那边也是一个收集箱,欢迎提出你的想法或是贡献代码!
清理副作用
有时你的自定义脚本会产生一些副作用,它们在脚本被销毁后依然可以作用在页面上,你需要手动清理它们。你可以将用于清理副作用的函数 push
进 vno.destructors
,它们会在页面重载前执行。
仅对于下面两种副作用,v-no 会自动清理:
- 通过
vno.addEventListener
添加的事件监听器:它同时会将移除监听器的函数push
进vno.destructors
。 - 含有
custom
类的元素:它们会在页面重载前全部移除。
- This page is open source, improve it