Skip to content

组件结构 ​

把一组 内置组件 打包成可复用块。JSON 必须写 "component": true。脚本用 Component({}),组件有自己的生命周期。

父页面仍用 Page({}) 打开;组件写在父页面 body 里,不进返回栈。要打开新页面用 页面跳转。

文件 ​

components/choose/component.json
components/choose/component.js

入口 deekeScript.json 可注册别名,不写则按 components/<id> 找目录:

json
{
  "components": [
    { "id": "choose", "file": "components/choose" }
  ]
}

JSON 标识 ​

必须有 "component": true。没有这个字段的 JSON 不能当组件加载。嵌入时只用 body,忽略 title / statusBar / popups。

json
{
  "component": true,
  "id": "choose",
  "body": [
    { "type": "notice", "text": "点快捷标签,或自己输入后再确定。" },
    {
      "type": "row",
      "children": [
        { "type": "tag", "text": "美食", "onTap": "pickFood", "style": { "background": "{{foodBg}}", "color": "{{foodColor}}" } },
        { "type": "tag", "text": "探店", "onTap": "pickShop", "style": { "background": "{{shopBg}}", "color": "{{shopColor}}" } }
      ]
    },
    { "type": "input", "name": "keyword", "label": "关键词" },
    { "type": "button", "text": "确定选用", "onTap": "onOk" }
  ]
}
参数名类型说明
componentBoolean必填,true 表示为自定义组件
idString组件名。页面里可写 "type": "choose"
bodyArray内部用内置组件拼起来
jsString默认同目录 component.js

body 里可以是文案、表单、列表、卡片等任意内置组件,也可以再嵌其它自定义组件(成环会拒绝)。

引用 ​

页面引入 ​

页面或其它组件的 JSON 里,把 type 写成组件 id。父页 body 里直接写这一段:

json
{
  "title": "自定义组件",
  "body": [
    {
      "type": "choose",
      "id": "inline",
      "onConfirm": "onPicked"
    }
  ]
}

也可显式写路径:

json
{ "type": "component", "src": "components/choose", "id": "inline", "onConfirm": "onPicked" }

弹窗引入 ​

外壳(遮罩、标题、取消)仍由 popup 负责,组件写在弹层 body 里。完整预览见 组件 · Popup。

json
{
  "popups": [{
    "title": "选关键词",
    "showIf": "open",
    "position": "bottom",
    "body": [
      { "type": "choose", "id": "picker", "onConfirm": "onPicked" }
    ]
  }]
}
参数名类型说明
type / srcString组件 id 或 components/choose
idString给 selectComponent 用。不写则用组件 id
paramsObject传给 created(props),字符串会做 {{path}} 替换
onXxxString组件 triggerEvent('xxx') 时调用的父级方法

右侧预览:上面是 choose 组件的 JSON / JS,下面是当前页的 page.json / page.js。父页 body 里有 { "type": "choose" }。点快捷标签或输入后再确定,父页会收到 confirm。