# 匿龙表单 **Repository Path**: neeloong/form ## Basic Information - **Project Name**: 匿龙表单 - **Description**: 一个表单布局渲染库. - **Primary Language**: JavaScript - **License**: Apache-2.0 - **Default Branch**: 开发 - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-12-23 - **Last Updated**: 2025-09-26 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README @neeloong/form =================== `@neeloong/form` 是一个基于响应式数据绑定的表单渲染库,目前使用 [tc39/proposal-signals](https://github.com/tc39/proposal-signals) 的 [polyfill](https://github.com/proposal-signals/signal-polyfill.git)实现状态管理。其模板语法结合了声明式指令和灵活的变量管理,支持复杂表单的动态渲染和交互。 ```js import { Store, Layout, render } from '@neeloong/form'; /** @import { Schema } from '@neeloong/form'; */ const template = `
内容1
内容2
``` `!fragment` 所在的标签不会被渲染。 ### 文本渲染(`!text`) 与 html 渲染(`!html`) **`!text`**:渲染纯文本 ```html ``` - **`!html`**:渲染 HTML 内容(需确保内容安全) ```html ``` 若 `!text` 与 `!html` 同时存在,`!html` 会被忽略。 ### 注释(`!comment`) 仅用于开发,对渲染无影响。 ```html ``` ### 别名与计算值 ```html ``` ### 显式变量(局部变量) ```html ``` ### 增强指令(`~`) #### 自定义指令 通过参数注册自定义指令 - **使用增强指令**: ```html ``` #### 增强指令顺序 按标签中首次出现的顺序执行。 ```html ``` ### 各用法的优先级 优先级从高到低: 1. 模板定义: `!template` 1. 条件: `!if` `!else` 1. 子属性: `!value` 1. 枚举: `!enum` `!sort` 1. 别名、计算名与显式变量: `*别名` `*计算名` `+变量` 1. 片段与模板调用: `!fragment` 1. 属性与事件: `:绑定属性` `@事件` `普通属性` `!bind` 1. 子内容: `!text` `!html` 1. 注释: `!comment` ### 变量 1. 字段扩展隐式属性 - `$value` 字段当前值 - `$state` 字段状态 - `$store` 只读 当前字段表单存储实例 - `$schema` 只读 字段的 Schema 定义 - `$null` 只读 是否为空元素 - `$index` 只读 当前项的索引 - `$no` 只读 数组项目的序号 - `$size` 只读 数组的长度、对象的成员数 - `$creatable` 只读 值是否可创建(`$new` 为 `true` 时,字段只读) - `$immutable` 只读 值是否不可改变(`$new` 为 `false` 时,字段只读) - `$new` 只读 是否新建项 - `$loading` 只读 加载状态 - `$readonly` 只读 是否只读 - `$hidden` 只读 是否可隐藏 - `$clearable` 只读 是否可清除 - `$required` 只读 是否必填 - `$disabled` 只读 是否禁用字段 - `$label` 只读 字段的标签信息 - `$description` 只读 字段的描述信息 - `$placeholder` 只读 字段的占位符信息 - `$min` 只读 数值字段的最小值限制 - `$max` 只读 数值字段的最大值限制 - `$step` 只读 数值字段的步长 - `$minLength` 只读 最小长度 - `$maxLength` 只读 最大长度 - `$pattern` 只读 模式 - `$values` 只读 可选值 - `$type` 只读 字段类型 - `$meta` 只读 字段元信息 - `$component` 只读 自定义渲染组件信息 - `$kind` 只读 字段类别 - `$error` 只读 字段校验错误信息 - `$errors` 只读 所有校验错误列表 - `$addable` 只读 是否可以为当前数组增加项目,非数组上下文总是为 `false` - `$removable` 只读 是否可以将当前项从数组中移除,非数组成员上下文总是为 `false` 1. 字段扩展隐式函数(只在事件中可用) - `$reset()` 重置数据 - `$validate()` 触发当前项的异步校验 - `$validate(true)` 触发当前项及其后代的异步校验 1. 数组字段扩展隐式函数(只在事件中可用) - `$insert(index, value)` 在指定索引插入值 - `$add(value)` :向数组末尾添加值。 - `$remove(index)` 删除指定索引的项 - `$move(from, to)` 移动数组项 - `$exchange(a, b)` 切换 a b 两项 1. 数组成员字段扩展隐式属性 - `$upMovable` 只读 是否可上移 - `$downMovable` 只读 是否可下移 1. 数组成员字段扩展隐式函数(只在事件中可用) - `$remove()` 移除当前项 - `$upMove()` 上移当前项 - `$downMove()` 下移当前项 1. 上下文隐式变量 - `$store` 只读 当前表单存储实例。 - `$root` 只读 根上下文对象。 1. `enum` 上下文新增的变量 - `$$count` 枚举上下文的数量 - `$$key` 枚举上下文的当前项的键 - `$$index` 枚举上下文当前项的索引 - `$$item` 枚举上下文当前项 1. 当前范围及组件范围的所有字段(数组字段的成员除外,因为数组字段成员索引为数字,不符合标识符命名规则)都存在 `field$value` 及 `field$$value` 形式的变量 1. 如果别名为字段的别名(如 `*alias="v"`),则也存在 `alias$value` 形式的变量 1. 当存在同名变量时,则会按照变量来源类型决定优先级,从高到低依次为: 1. 上下文隐式变量 1. 显式声明(如别名、计算名、显式变量),如果别名是字段的别名,则也包括 `alias$value` 形式的变量 1. 全局变量,此部分由 `render` 的参数传入 1. 字段声明,包括 `field$value` 及 `field$$value` 形式的变量 1. 在同一来源类型重复的变量名,再按照作用域处理 ### 示例代码 #### 嵌套表单与循环 ```html