Skip to content

表单示例

登录表单

json
{
  "data": {
    "form": { "username": "", "password": "", "remember": false },
    "loading": false,
    "error": ""
  },
  "computed": {
    "canSubmit": "form.username && form.password && !loading"
  },
  "methods": {
    "handleLogin": [
      { "set": "loading", "value": true },
      { "set": "error", "value": "" },
      {
        "fetch": "/api/login",
        "method": "POST",
        "body": "{{ form }}",
        "then": { "emit": "login-success", "payload": "{{ $response }}" },
        "catch": { "set": "error", "value": "{{ $error.message }}" },
        "finally": { "set": "loading", "value": false }
      }
    ]
  },
  "com": "form",
  "props": { "class": "login-form" },
  "events": { "submit.prevent": { "call": "handleLogin" } },
  "children": [
    {
      "com": "div",
      "if": "error",
      "props": { "class": "error-alert" },
      "children": "{{ error }}"
    },
    {
      "com": "div",
      "props": { "class": "form-item" },
      "children": [
        { "com": "label", "children": "用户名" },
        { "com": "input", "model": "form.username", "props": { "placeholder": "请输入用户名" } }
      ]
    },
    {
      "com": "div",
      "props": { "class": "form-item" },
      "children": [
        { "com": "label", "children": "密码" },
        { "com": "input", "model": "form.password", "props": { "type": "password", "placeholder": "请输入密码" } }
      ]
    },
    {
      "com": "div",
      "props": { "class": "form-item" },
      "children": [
        {
          "com": "label",
          "children": [
            { "com": "input", "model": "form.remember", "props": { "type": "checkbox" } },
            " 记住我"
          ]
        }
      ]
    },
    {
      "com": "button",
      "props": { "type": "submit", "disabled": "{{ !canSubmit }}" },
      "children": "{{ loading ? '登录中...' : '登录' }}"
    }
  ]
}

搜索表单

json
{
  "data": {
    "keyword": "",
    "category": "",
    "categories": [
      { "value": "", "label": "全部分类" },
      { "value": "tech", "label": "技术" },
      { "value": "life", "label": "生活" }
    ]
  },
  "methods": {
    "search": {
      "emit": "search",
      "payload": "{{ { keyword, category } }}"
    }
  },
  "com": "form",
  "events": { "submit.prevent": { "call": "search" } },
  "children": [
    { "com": "input", "model": "keyword", "props": { "placeholder": "搜索..." } },
    {
      "com": "select",
      "model": "category",
      "children": [
        {
          "for": "cat in categories",
          "com": "option",
          "props": { "value": "{{ cat.value }}" },
          "children": "{{ cat.label }}"
        }
      ]
    },
    { "com": "button", "props": { "type": "submit" }, "children": "搜索" }
  ]
}

动态表单

json
{
  "data": {
    "fields": [
      { "name": "name", "label": "姓名", "type": "text", "required": true },
      { "name": "email", "label": "邮箱", "type": "email", "required": true },
      { "name": "phone", "label": "电话", "type": "tel", "required": false }
    ],
    "formData": {}
  },
  "com": "form",
  "children": [
    {
      "for": "field in fields",
      "key": "{{ field.name }}",
      "com": "div",
      "props": { "class": "form-item" },
      "children": [
        {
          "com": "label",
          "children": "{{ field.label }}{{ field.required ? ' *' : '' }}"
        },
        {
          "com": "input",
          "props": {
            "type": "{{ field.type }}",
            "value": "{{ formData[field.name] || '' }}",
            "required": "{{ field.required }}"
          },
          "events": {
            "input": { "set": "formData.{{ field.name }}", "value": "{{ $event.target.value }}" }
          }
        }
      ]
    }
  ]
}

Released under the MIT License.