一次偶然的机会,让我遇见了amis之排错总结(持续更新,因为还在学习)(下)

简介: 一次偶然的机会,让我遇见了amis之排错总结(持续更新,因为还在学习)

在事件中发送网络请求数据保存在哪


这里有介绍


这里有一个案例


其实他就是保存在event.data.responseResult中,如果配置了"outputVar"这个属性,那么将保存在这个属性中的变量里。


{
      "type": "form",
      "id": "form_data_001",
      "title": "用户信息",
      "body": [
        {
          "type": "input-text",
          "label": "名称",
          "name": "age",
          "disabled": false,
          "mode": "horizontal"
        },
        {
          "type": "input-text",
          "label": "作者",
          "name": "author",
          "disabled": false,
          "mode": "horizontal"
        }
      ],
      "actions": [
        {
          "type": "button",
          "label": "去获取表单数据",
          "primary": true,
          "wrapWithPanel": false,
          "onEvent": {
            "click": {
              "actions": [
                {
                  "actionType": "ajax",
                  "args": {
                    "api": "/api/users/del"
                  },
                  // 如果配置了这个属性,那么它将表示返回的信息放在myResult中
                  // 如果没有配置这个属性,那么么人放置在responseResult属性中
                  // "outputVar": "myResult"
                },
                {
                  "actionType": "setValue",
                  "componentId": "form_data_001",
                  "args": {
                    // "value": "${event.data.myResult.other}"
                    "value": "${event.data.responseResult.other}"
                  }
                },
                {
                  "actionType": "toast",
                  "args": {
                    // "msg": "${event.data.myResult | json}"
                    "msg": "${event.data.responseResult | json}"
                  }
                }
              ]
            }
          }
        }
      ]
    },


网络异常,图片无法展示
|


阻止默认行为


在动作(actions)中配置这个属性为true即可。


"preventDefault": true


具体案例请看这里


还有这个案例


表单验证


表单验证的需求很简单,当用户在没有填写必填项时给出提示。需要我们手动定制提示内容。


当提交表单时,如果验证不通过toast中提示的内容。


// 验证的信息
"messages": {
"validateFailed": "请仔细检查表单规则,部分表单项没通过验证"
},


表单项的验证规则和自定义错误提示


{
  "type": "input-text",
  "name": "test",
  "label": "必填",
  required: true, 
  // 表单验证规则
  validations: {
    isRequired: true
  },
  // 验证错误是提示的内容
  "validationErrors": {
    "isRequired": "请填写test"
  }
},


具体请查看这里


这里有对应验证规则的默认的提示信息


在筛选数据时,输入(选中)表单值时,将会触发筛选请求,而无需点击筛选按钮(重点)


因为看我们公司的后台管理系统都有这样一个需求,然后就想着也做一下。但是对于这种高度封装的库,不一定可以实现。于是就试试了。


💢💢💢 星期五晚上测试了很久没有实现,星期六 2022-9-17 来再次尝试。


因为select,input-text这个组件也暴露了一些事件和动作,想着实现这种也很简单,就是监听change事件,然后发送ajax动作。并在此刷新页面,做筛选请求。但是这又是那种问题。在ajax动作中使用reload是不生效的。但是官网明确说了是可以生效的。看这里官方案例


然后就想着使用setValue动作吧,把值更新过去,但是也是无济于事的。根本没有变化。


onEvent: {
    change: {
      actions: [
        // 直接在这里调用submit呢 啥也不行
        // {
        //   actionType: "submit",
        // },
        // {
        //   actionType: "ajax",
        //   reload: "loginclosecrud?closestyle=${closestyle}&productid=${productid}",
        //   args: {
        //     api: {
        //       url: "/api/logindata",
        //       method: "get",
        //       data: {
        //         // 在这里可以这样获取值
        //         "closestyle": "${event.data.value}",
        //         productid: "${productid}"
        //       }
        //     }, 
        //   }
        // },
        {
          // 这里刷新的时候会携带很多无用的信息
          // 这里刷新的时候会携带很多无用的信息
          actionType: "reload",
          componentId: "crudId",
          // reload也可以写args参数
          args: {
            closestyle: "${event.data.value}",
            productid: "${productid}"
          }
        },
        // {
        //   actionType: "setValue",
        //   componentId: "crudId",
        //   args: {
        //     value: {
        //       count: "${event.data.responseResult.count}",
        //       rows: "${event.data.responseResult.rows}"
        //     }
        //   }
        // },
        // {
        //   actionType: "toast",
        //   args: {
        //     msg: "${event.data.value | json}"
        //   }
        // }
      ]
    }
  }


讲一下自己试错的过程吧


  • 通过ajax动作,获取数据,并设置reload属性绑定组件的name属性


// {
    //   actionType: "ajax",
    //   reload: "loginclosecrud?closestyle=${closestyle}&productid=${productid}",
    //   args: {
    //     api: {
    //       url: "/api/logindata",
    //       method: "get",
    //       data: {
    //         // 在这里可以这样获取值
    //         "closestyle": "${event.data.value}",
    //         productid: "${productid}"
    //       }
    //     }, 
    //   }
    // },


上面的做法发现没有刷新指定的组件。


  • 通过setValue动作,发送请求回来的数据。


// {
    //   actionType: "setValue",
    //   componentId: "crudId",
    //   args: {
    //     value: {
    //       count: "${event.data.responseResult.count}",
    //       rows: "${event.data.responseResult.rows}"
    //     }
    //   }
    // },


上面这种做法,也是没有更新界面数据的。


  • 然后直接使用reload动作,来去刷新界面。


{
      // 这里刷新的时候会携带很多无用的信息
      actionType: "reload",
      componentId: "crudId",
    },


但是查看控制台,发现,目标组件刷新时会携带当前数据域 (event.data) 中的所有数

据。


网络异常,图片无法展示
|


  • 然后尝试了一下在刷新目标组件的时候发送需要的数据


{
      // 这里刷新的时候会携带很多无用的信息
      // 这里刷新的时候会携带很多无用的信息
      actionType: "reload",
      componentId: "crudId",
      // reload也可以写args参数
      args: {
        closestyle: "${event.data.value}",
        productid: "${productid}"
      }
    },


这样就实现了这个需求。


之所以之前没有尝试这种写法,是因为官方文档中,没有指出说reload动作可以携带args。


网络异常,图片无法展示
|


这里还需要注意一下,在args中获取数据的时候,如果是在当前表单项获取数据需要通过event.data.value,如果获取其他表单项的值时,直接通过模板语法获取表单的name属性即可。


args: {
        // 获取当前表单项值
        closestyle: "${event.data.value}",
        // 获取其他表单项值
        productid: "${productid}"
      }


删除按钮的二次确认模态框的修改


原生的太丑了。想要一个轻提示。


网络异常,图片无法展示
|


为啥官方不提供一个可以定制的入口呢?我是没有找到,今天看源码也没有找到。


今天(2022-9-15)发现了解决办法,不过不是tooltip组件,而是通过一个定制的弹窗来做二次确认,而不是使用它的confirmText属性。


body: {
    type: "button",
    level: "link",
    className: "text-danger",
    label: "删除",
    "onEvent": {
      "click": {
        "actions": [
          {
            "actionType": "dialog",
            "dialog": {
              "type": "dialog",
              "title": "",
              "body": [
                {
                  "type": "tpl",
                  "tpl": "<p>确定要删除吗?</p>",
                  "inline": false
                }
              ],
              "onEvent": {
                "confirm": {
                  "actions": [
                    {
                      "actionType": "ajax",
                      args: {
                        api: {
                          method: "get",
                          url: "/api/users/del"
                        }
                      }
                    }
                  ]
                },
                "cancel": {
                  "actions": [
                    {
                      "actionType": "toast",
                      "args": {
                        "msg": "删除失败"
                      }
                    }
                  ]
                }
              }
            }
          }
        ]
      }
    }
  }


网络异常,图片无法展示
|


2022-9-15测试发现,删除后不能联动crud组件重新获取数据,这就很无语好吧。然后想着通过reload属性去关联crud组件,来刷新crud组件,让其重新获取数据,凡是无济于事。


"confirm": {
  // 配置监听的动作 event.data.xxx
  "actions": [
    {
      "actionType": "ajax",
      // 在这里增加一个reload去关联crud组件。
      "reload": "loginclosecrud",
      args: {
        api: {
          method: "get",
          url: "/api/logindata/delete",
          data: {
            id: "${id}",
          }
        }
      }
    }
  ]
},


这里可以参考这个。请求成功后,刷新目标组件官方网站可是说了可以,但是就是不行。


解决方案一


但是在一个交流群里,看见了一位老哥的操作,就试了试。结果还真的可以。


{
    "label": "删除",
    "type": "button",
    loading: false,
    "level": "link",
    "className": "text-danger",
    actionType: "dialog",
    dialog: {
      type: "dialog",
      "title": "",
      actions: [
        {
          type: "button",
          actionType: "cancel",
          label: "取消"
        },
        {
          type: "button",
          actionType: "confirm",
          label: "确认",
          level: "danger"
        }
      ],
      body: [
        {
          type: "tpl",
          tpl: "<p> 确定要删除吗?</p>"
        },
        {
          type: "form",
          api: {
            url: "/api/logindata/delete",
            method: "get",
            data: {
              id: "${id}",
            }
          }
        }
      ]
    },


解决方案二


今天2022-9-16今天看官网发现了一个可以更新页面的动作,并且联动其他组件。


// 这里加上一个reload动作,并绑定crud组件的id
{
  actionType: "reload",
  // 写刷新页面的id
  componentId: "crudId"
}


就是通过制定目的组件的id属性。


"onEvent": {
    // 事件名称
    "confirm": {
        // 配置监听的动作 event.data.xxx
        "actions": [
            {
              "actionType": "ajax",
              args: {
                  api: {
                      method: "get",
                      url: "/api/logindata/delete",
                      data: {
                          id: "${id}",
                      }
                  },
                  // 自定义请求成功或者失败的提示信息。toast。这个只是网络请求中的成功或者失败,
                  // 而不是我们自己点击取消或者确认按钮的成功或者失败。
                  "messages": {
                      "success": "成功了!欧耶",
                      "failed": "失败了呢。。"
                  }
              }
            },
            // 这里加上一个reload动作,并绑定crud组件的id
            {
              actionType: "reload",
              // 写刷新页面的id
              componentId: "crudId"
            }
        ]
    },
    // 点击取消按钮的时候触发
    "cancel": {
        "actions": [
            {
                "actionType": "toast",
                "args": {
                    "msg": "删除失败"
                }
            }
        ]
    }
}


页面加载的loading图标修改。


网络异常,图片无法展示
|


加载按钮太暗。


这个可以通过设置css变量来改变


/* 统一修改内置的css变量 */
:root {
  /* 加载时的背景图片 */
  --Spinner-bg: url("data:image/svg+xml;base64,Cjxzdmcgd2lkdGg9IjY0cHgiIGhlaWdodD0iNjRweCIgdmlld0JveD0iMCAwIDY0IDY0IiB2ZXJzaW9uPSIxLjEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiPgogICAgPGcgaWQ9Iumhtemdoi0xIiBzdHJva2U9Im5vbmUiIHN0cm9rZS13aWR0aD0iMSIgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj4KICAgICAgICA8ZyBpZD0ibG9hZGluZyIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMC41MDAwMDAsIDAuNTAwMDAwKSI+CiAgICAgICAgICAgIDxyZWN0IGlkPSLnn6nlvaIiIHN0cm9rZT0iIzk3OTc5NyIgZmlsbD0iI0Q4RDhEOCIgZmlsbC1ydWxlPSJub256ZXJvIiBvcGFjaXR5PSIwIiB4PSIwIiB5PSIwIiB3aWR0aD0iNjMiIGhlaWdodD0iNjMiPjwvcmVjdD4KICAgICAgICAgICAgPGcgaWQ9Iue8lue7hOWkh+S7vS02IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgzLjk4MDAwMCwgMC43ODAwMDApIj4KICAgICAgICAgICAgICAgIDxwb2x5Z29uIGlkPSJmcmFtZSIgc3Ryb2tlPSIjMjQ2OEYyIiBzdHJva2Utd2lkdGg9IjMuMiIgcG9pbnRzPSIyNy41MiA1LjEyIDQ5LjY5MDI1MDMgMTcuOTIgNDkuNjkwMjUwMyA0My41MiAyNy41MiA1Ni4zMiA1LjM0OTc0OTY2IDQzLjUyIDUuMzQ5NzQ5NjYgMTcuOTIiIHN0cm9rZS1kYXNoYXJyYXk9IjE2MCAxNjAiIHN0cm9rZS1kYXNob2Zmc2V0PSIxNjAiPgogICAgICAgICAgICAgICAgICAgIDxhbmltYXRlIGlkPSJmcmFtZTEiIGF0dHJpYnV0ZU5hbWU9InN0cm9rZS1kYXNob2Zmc2V0IiBiZWdpbj0iLjQ1cztmcmFtZTIuZW5kIiBkdXI9Ii45cyIgdHlwZT0idHJhbnNsYXRlIiBmcm9tPSIxNjAiIHRvPSItMTYwIiBmaWxsPSJmcmVlemUiICBjYWxjTW9kZT0ic3BsaW5lIiBrZXlUaW1lcz0iMDsgMSIgIGtleVNwbGluZXM9Ii41IDAgLjUgMSIvPgogICAgICAgICAgICAgICAgICAgIDxhbmltYXRlIGlkPSJmcmFtZTIiIGF0dHJpYnV0ZU5hbWU9InN0cm9rZS1kYXNob2Zmc2V0IiBiZWdpbj0iZnJhbWUxLmVuZCIgZHVyPSIuOXMiIHR5cGU9InRyYW5zbGF0ZSIgZnJvbT0iMTYwIiB0bz0iMTYwIiBmaWxsPSJmcmVlemUiIGNhbGNNb2RlPSJzcGxpbmUiIGtleVRpbWVzPSIwOyAxIiAga2V5U3BsaW5lcz0iLjUgMCAuNSAxIi8+CiAgICAgICAgICAgICAgICA8L3BvbHlnb24+CiAgICAgICAgICAgICAgICA8Y2lyY2xlIGlkPSJjaXJjbGUxIiBmaWxsPSIjMjQ2OEYyIiBmaWxsLXJ1bGU9Im5vbnplcm8iIGN4PSIyNy41MiIgY3k9IjQuOCIgcj0iNC44Ij4KICAgICAgICAgICAgICAgICAgICA8YW5pbWF0ZVRyYW5zZm9ybSBpZD0iY2lyY2xlMW9uZSIgYXR0cmlidXRlTmFtZT0idHJhbnNmb3JtIiBiZWdpbj0iMHM7Y2lyY2xlMXR3by5lbmQiIGR1cj0iLjU0cyIgdHlwZT0idHJhbnNsYXRlIiBmcm9tPSIwIDI2IiB0bz0iMCAwIiBmaWxsPSJmcmVlemUiIGNhbGNNb2RlPSJzcGxpbmUiIGtleVRpbWVzPSIwOyAxIiAga2V5U3BsaW5lcz0iLjUgMCAuNSAxIi8+CiAgICAgICAgICAgICAgICAgICAgPGFuaW1hdGVUcmFuc2Zvcm0gaWQ9ImNpcmNsZTF0d28iIGF0dHJpYnV0ZU5hbWU9InRyYW5zZm9ybSIgYmVnaW49ImNpcmNsZTFvbmUuZW5kICsgLjcycyIgZHVyPSIuNTRzIiB0eXBlPSJ0cmFuc2xhdGUiIGZyb209IjAgMCIgdG89IjAgMjYiIGZpbGw9ImZyZWV6ZSIgY2FsY01vZGU9InNwbGluZSIga2V5VGltZXM9IjA7IDEiICBrZXlTcGxpbmVzPSIuNSAwIC41IDEiLz4KICAgICAgICAgICAgICAgIDwvY2lyY2xlPgogICAgICAgICAgICAgICAgPGNpcmNsZSBpZD0iY2lyY2xlMiIgZmlsbD0iIzI0NjhGMiIgZmlsbC1ydWxlPSJub256ZXJvIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSg1MC4yNDAwMDAsIDE3LjI4MDAwMCkgcm90YXRlKC0xODAuMDAwMDAwKSB0cmFuc2xhdGUoLTUwLjI0MDAwMCwgLTE3LjI4MDAwMCkgIiBjeD0iNTAuMjQiIGN5PSIxNy4yOCIgcj0iNC44Ij4KICAgICAgICAgICAgICAgICAgICA8YW5pbWF0ZVRyYW5zZm9ybSBpZD0iY2lyY2xlMm9uZSIgYXR0cmlidXRlTmFtZT0idHJhbnNmb3JtIiBiZWdpbj0iMHM7Y2lyY2xlMnR3by5lbmQiIGR1cj0iLjU0cyIgdHlwZT0idHJhbnNsYXRlIiBmcm9tPSItMjIuNSAxMyIgdG89IjAgMCIgZmlsbD0iZnJlZXplIiBjYWxjTW9kZT0ic3BsaW5lIiBrZXlUaW1lcz0iMDsgMSIgIGtleVNwbGluZXM9Ii41IDAgLjUgMSIvPgogICAgICAgICAgICAgICAgICAgIDxhbmltYXRlVHJhbnNmb3JtIGlkPSJjaXJjbGUydHdvIiBhdHRyaWJ1dGVOYW1lPSJ0cmFuc2Zvcm0iIGJlZ2luPSJjaXJjbGUyb25lLmVuZCArIC43MnMiIGR1cj0iLjU0cyIgdHlwZT0idHJhbnNsYXRlIiBmcm9tPSIwIDAiIHRvPSItMjIuNSAxMyIgZmlsbD0iZnJlZXplIiBjYWxjTW9kZT0ic3BsaW5lIiBrZXlUaW1lcz0iMDsgMSIgIGtleVNwbGluZXM9Ii41IDAgLjUgMSIvPgogICAgICAgICAgICAgICAgPC9jaXJjbGU+CiAgICAgICAgICAgICAgICA8Y2lyY2xlIGlkPSJjaXJjbGUzIiBmaWxsPSIjMjQ2OEYyIiBmaWxsLXJ1bGU9Im5vbnplcm8iIHRyYW5zZm9ybT0idHJhbnNsYXRlKDUwLjI0MDAwMCwgNDMuMjAwMDAwKSByb3RhdGUoOTAuMDAwMDAwKSB0cmFuc2xhdGUoLTUwLjI0MDAwMCwgLTQzLjIwMDAwMCkgIiBjeD0iNTAuMjQiIGN5PSI0My4yIiByPSI0LjgiPgogICAgICAgICAgICAgICAgICAgIDxhbmltYXRlVHJhbnNmb3JtIGlkPSJjaXJjbGUzb25lIiBhdHRyaWJ1dGVOYW1lPSJ0cmFuc2Zvcm0iIGJlZ2luPSIwcztjaXJjbGUzdHdvLmVuZCIgZHVyPSIuNTRzIiB0eXBlPSJ0cmFuc2xhdGUiIGZyb209Ii0yMi41IC0xMyIgdG89IjAgMCIgZmlsbD0iZnJlZXplIiBjYWxjTW9kZT0ic3BsaW5lIiBrZXlUaW1lcz0iMDsgMSIgIGtleVNwbGluZXM9Ii41IDAgLjUgMSIvPgogICAgICAgICAgICAgICAgICAgIDxhbmltYXRlVHJhbnNmb3JtIGlkPSJjaXJjbGUzdHdvIiBhdHRyaWJ1dGVOYW1lPSJ0cmFuc2Zvcm0iIGJlZ2luPSJjaXJjbGUzb25lLmVuZCArIC43MnMiIGR1cj0iLjU0cyIgdHlwZT0idHJhbnNsYXRlIiBmcm9tPSIwIDAiIHRvPSItMjIuNSAtMTMiIGZpbGw9ImZyZWV6ZSIgY2FsY01vZGU9InNwbGluZSIga2V5VGltZXM9IjA7IDEiICBrZXlTcGxpbmVzPSIuNSAwIC41IDEiLz4KICAgICAgICAgICAgICAgIDwvY2lyY2xlPgogICAgICAgICAgICAgICAgPGNpcmNsZSBpZD0iY2lyY2xlNCIgZmlsbD0iIzI0NjhGMiIgZmlsbC1ydWxlPSJub256ZXJvIiBjeD0iMjcuNTIiIGN5PSI1Ni42NCIgcj0iNC44Ij4KICAgICAgICAgICAgICAgICAgICA8YW5pbWF0ZVRyYW5zZm9ybSBpZD0iY2lyY2xlMW9uZSIgYXR0cmlidXRlTmFtZT0idHJhbnNmb3JtIiBiZWdpbj0iMHM7Y2lyY2xlMXR3by5lbmQiIGR1cj0iLjU0cyIgdHlwZT0idHJhbnNsYXRlIiBmcm9tPSIwIC0yNiIgdG89IjAgMCIgZmlsbD0iZnJlZXplIiBjYWxjTW9kZT0ic3BsaW5lIiBrZXlUaW1lcz0iMDsgMSIgIGtleVNwbGluZXM9Ii41IDAgLjUgMSIvPgogICAgICAgICAgICAgICAgICAgIDxhbmltYXRlVHJhbnNmb3JtIGlkPSJjaXJjbGUxdHdvIiBhdHRyaWJ1dGVOYW1lPSJ0cmFuc2Zvcm0iIGJlZ2luPSJjaXJjbGUxb25lLmVuZCArIC43MnMiIGR1cj0iLjU0cyIgdHlwZT0idHJhbnNsYXRlIiBmcm9tPSIwIDAiIHRvPSIwIC0yNiIgZmlsbD0iZnJlZXplIiBjYWxjTW9kZT0ic3BsaW5lIiBrZXlUaW1lcz0iMDsgMSIgIGtleVNwbGluZXM9Ii41IDAgLjUgMSIvPgogICAgICAgICAgICAgICAgPC9jaXJjbGU+CiAgICAgICAgICAgICAgICA8Y2lyY2xlIGlkPSJjaXJjbGU1IiBmaWxsPSIjMjQ2OEYyIiBmaWxsLXJ1bGU9Im5vbnplcm8iIHRyYW5zZm9ybT0idHJhbnNsYXRlKDQuODAwMDAwLCA0My4yMDAwMDApIHJvdGF0ZSgtMTgwLjAwMDAwMCkgdHJhbnNsYXRlKC00LjgwMDAwMCwgLTQzLjIwMDAwMCkgIiBjeD0iNC44IiBjeT0iNDMuMiIgcj0iNC44Ij4KICAgICAgICAgICAgICAgICAgICA8YW5pbWF0ZVRyYW5zZm9ybSBpZD0iY2lyY2xlNW9uZSIgYXR0cmlidXRlTmFtZT0idHJhbnNmb3JtIiBiZWdpbj0iMHM7Y2lyY2xlNXR3by5lbmQiIGR1cj0iLjU0cyIgdHlwZT0idHJhbnNsYXRlIiBmcm9tPSIyMi41IC0xMyIgdG89IjAgMCIgZmlsbD0iZnJlZXplIiBjYWxjTW9kZT0ic3BsaW5lIiBrZXlUaW1lcz0iMDsgMSIgIGtleVNwbGluZXM9Ii41IDAgLjUgMSIvPgogICAgICAgICAgICAgICAgICAgIDxhbmltYXRlVHJhbnNmb3JtIGlkPSJjaXJjbGU1dHdvIiBhdHRyaWJ1dGVOYW1lPSJ0cmFuc2Zvcm0iIGJlZ2luPSJjaXJjbGU1b25lLmVuZCArIC43MnMiIGR1cj0iLjU0cyIgdHlwZT0idHJhbnNsYXRlIiBmcm9tPSIwIDAiIHRvPSIyMi41IC0xMyIgZmlsbD0iZnJlZXplIiBjYWxjTW9kZT0ic3BsaW5lIiBrZXlUaW1lcz0iMDsgMSIgIGtleVNwbGluZXM9Ii41IDAgLjUgMSIvPgogICAgICAgICAgICAgICAgPC9jaXJjbGU+CiAgICAgICAgICAgICAgICA8Y2lyY2xlIGlkPSJjaXJjbGU2IiBmaWxsPSIjMjQ2OEYyIiBmaWxsLXJ1bGU9Im5vbnplcm8iIHRyYW5zZm9ybT0idHJhbnNsYXRlKDQuODAwMDAwLCAxNy4yODAwMDApIHJvdGF0ZSg5MC4wMDAwMDApIHRyYW5zbGF0ZSgtNC44MDAwMDAsIC0xNy4yODAwMDApICIgY3g9IjQuOCIgY3k9IjE3LjI4IiByPSI0LjgiPgogICAgICAgICAgICAgICAgICAgIDxhbmltYXRlVHJhbnNmb3JtIGlkPSJjaXJjbGU2b25lIiBhdHRyaWJ1dGVOYW1lPSJ0cmFuc2Zvcm0iIGJlZ2luPSIwcztjaXJjbGU2dHdvLmVuZCIgZHVyPSIuNTRzIiB0eXBlPSJ0cmFuc2xhdGUiIGZyb209IjIyLjUgMTMiIHRvPSIwIDAiIGZpbGw9ImZyZWV6ZSIgY2FsY01vZGU9InNwbGluZSIga2V5VGltZXM9IjA7IDEiICBrZXlTcGxpbmVzPSIuNSAwIC41IDEiLz4KICAgICAgICAgICAgICAgICAgICA8YW5pbWF0ZVRyYW5zZm9ybSBpZD0iY2lyY2xlNnR3byIgYXR0cmlidXRlTmFtZT0idHJhbnNmb3JtIiBiZWdpbj0iY2lyY2xlNm9uZS5lbmQgKyAuNzJzIiBkdXI9Ii41NHMiIHR5cGU9InRyYW5zbGF0ZSIgZnJvbT0iMCAwIiB0bz0iMjIuNSAxMyIgZmlsbD0iZnJlZXplIiBjYWxjTW9kZT0ic3BsaW5lIiBrZXlUaW1lcz0iMDsgMSIgIGtleVNwbGluZXM9Ii41IDAgLjUgMSIvPgogICAgICAgICAgICAgICAgPC9jaXJjbGU+CiAgICAgICAgICAgIDwvZz4KICAgICAgICA8L2c+CiAgICA8L2c+Cjwvc3ZnPg==")
}


进入页面时,不希望立刻请求


由于数据量过大,我们希望进入页面的时候,不去请求数据,只有当用户点击了查询按钮时,采取请求数据。


对于crud组件来说,这个很方便。只需要配置这个属性即可。


// 只针对有filter时,当点击了查询时,才会去请求数据
  // 是否初始化的时候拉取数据, 只针对有 filter 的情况, 没有 filter 初始都会拉取数据
  initFetch: false,


注意:这个属性只在设置了filter属性时有效。


目前想要解决的问题但是没有找到方法


定制一个没有太多内容的404页面。


网络异常,图片无法展示
|


404页面不是一个完整的,他只是在内容区域展示404。


相关文章
|
JavaScript 搜索推荐 Java
一次偶然的机会,让我遇见了amis之排错总结(持续更新,因为还在学习)(上)
一次偶然的机会,让我遇见了amis之排错总结(持续更新,因为还在学习)
|
4月前
|
SQL 安全 算法
爆赞!终于有大佬把网络安全零基础入门教程给讲明白了!
网络安全的一个通用定义指网络信息系统的硬件、软件及其系统中的数据受到保护,不因偶然的或者恶意的破坏、更改、泄露,系统能连续、可靠、正常地运行,服务不中断。网络安全简单的说是在网络环境下能够识别和消除不安全因素的能力。 网络安全在不同环境和应用中有不同的解释,例如系统运行的安全、系统信息内容的安全、信息通信与传播的安全等。 网络安全的主体是保护网络上的数据和通信的安全,数据安全性是指软硬件保护措施,用来阻止对数据进行非授权的泄漏、转移、修改和破坏等,通信安全性是通信保护措施,要求在通信中采用保密安全性、传输安全性、辐射安全性等措施。
|
6月前
|
人工智能 达摩院 算法
什么是优化技术?给算法小白同学的快速讲解和上手文
本文作者用一个曾经小白学习的视角,来讲解什么是优化问题,以及要如何用这个优化技术。
48098 59
|
6月前
|
前端开发 Java 数据库连接
如何顺利完成毕业项目看完这篇文章有你想要的!
如何顺利完成毕业项目看完这篇文章有你想要的!
|
Android开发 开发者 容器
[持续更新]细数那些Compose新手容易犯的错误(一)
[持续更新]细数那些Compose新手容易犯的错误
292 0
|
API Android开发 图形学
[持续更新]细数那些Compose新手容易犯的错误(二)
[持续更新]细数那些Compose新手容易犯的错误
204 0
|
Java 应用服务中间件 Nacos
Java后端项目排错经验分享
Java后端项目排错经验分享
244 0
|
人工智能 搜索推荐 程序员
为什么新手在编程社区提问得不到回答,甚至还会被嘲讽?
说了这么多,你也不要因此而不想提问题。该问的还是得问,要敢于提问和讨论,甚至要上 StackOverflow 等英语网站去问。不然怎么提高自己?不但要问,还要回答,“教”是最好的“学”。当你能向别人解释清楚一个东西时,才是你真的理解了它。既回馈了社区,又提升了自己,何乐而不为?
|
搜索推荐 程序员 Python
为什么新手在编程社区提问经常得不到回答,甚至还会被嘲讽?
学编程难免遇到问题,遇到问题就需要上网求助。然而有过不少同学向我诉苦,说在网上提问没有人回答,有的还收到一些不是很友好的回复。我自己也在经常上的论坛上目睹过类似的帖子。以至于有人说,程序员社区就是对新人不友好,不愿帮助新人,甚至说这是怕别人学会了来抢饭碗。
|
SQL JSON 开发框架
一次偶然的机会,让我遇见了amis
一次偶然的机会,让我遇见了amis