在 Svelte 中使用

LuLu UI 也是可以在 Svelte 中无障碍使用的,不仅 Edge 主题可以使用,Pure 主题也可以使用。

因为 Svelte 的事件也都走的原生 DOM 机制,然后其底层实现逻辑和 LuLu UI 如出一辙,是面向 DOM 开发的,因此,从这个角度,LuLu UI 和 Svelte 一起食用,味道是要比 Vue/React 更美味的。

本文档主要示意如何在 Svelte 中使用 LuLu UI 比较有代表性的 UI 组件。

假设你已经安装了 LuLu UI。

npm install lu2

表单控件

以最为基础的 <select> 控件举例。

相关代码如下所示,在任意的 *.svelte 模块文件中:

// <script> 中
import "lu2/theme/edge/css/common/ui/Select.css";
import "lu2/theme/edge/js/common/ui/Select.js";

function showValue (event) {
  console.log(`选中的值是:${event.target.value}`);
}
<select is="ui-select" on:change={showValue}>
  <option value="1" disabled>选项1</option>
  <option value="2">选项2</option>
  <option value="3" selected>选项3</option>
</select>

效果截图示意:

弹框

由于弹框大部分的使用场景都是使用 new 语法构造,因此,也是可以在 Svelte 中无障碍使用的,类似组件还有 LightTip 轻提示。

使用示意,点击一个按钮出现 alert 提示框:

<div id="root"></div>
import "lu2/theme/edge/css/common/ui/Button.css";
import "lu2/theme/edge/css/common/ui/Dialog.css";
import Dialog from "lu2/theme/edge/js/common/ui/Dialog.js";

function showDialog () {
    new Dialog().alert('提示信息');
}
<button type="primary" is="ui-button" on:click={showDialog}>弹框</button>

效果截图示意:

数据列表

在 Vue 以及 Preact 中,数据列表的参数可以通过 connected 事件进行设置,但是在 Svelte 中使用 connected 事件处理会有问题,因为自定义组件在被定义的时候,通过 on:connected 设置的自定义事件还未被 Svelte 添加。

如下代码,is="ui-datalist" 在浏览器中定义的时候,setListData 方法还没有被添加,因此,无法触发 connected 事件:

<!-- setListData 不会执行 -->
<input class="ui-input" results="5" is="ui-datalist" on:connected={setListData}>

但是不要担心,Svelte 提供了原生的 API 可以更加方便地实现传参效果,那就是 use:Action 语法,如下所示:

<div id="root"></div>
import "lu2/theme/edge/css/common/ui/Input.css";
import "lu2/theme/edge/css/common/ui/Datalist.css";
import "lu2/theme/edge/js/common/ui/Datalist.js";

const data = [{
  value: '蔡世豪',
  userid: 1
}, ..., {
  value: '彭玉乐',
  userid: 7
}];
function setListData (element) {
    element.params.data = data;
}
<input class="ui-input" results="5" is="ui-datalist" use:setListData>

效果截图示意:

注意,如果你使用的是自定义属性,例如 is-dropis-tips 这样的语法使用 LuLu UI 的组件,则 on:connected 语法是正常的,因为这些用法的组件初始化是在 DOM 载入完毕后通过异步观察实现,执行时机晚于 Svelte 对 DOM 的更新处理。

好,以上3个示例囊括了 LuLu UI 所有的 UI 组件类型,可以看出,LuLu UI Edge 主题绝对可以在 Svelte 中使用的。

本页贡献者:

zhangxinxu