主頁 > 企業開發 > vue3 element-plus 配置json快速生成form表單組件,提升生產力近600%(已在公司使用,持續優化中)

vue3 element-plus 配置json快速生成form表單組件,提升生產力近600%(已在公司使用,持續優化中)

2021-10-22 06:35:08 企業開發

??本文為博客園社區首發文章,未獲授權禁止轉載

大家好,我是aehyok??,一個住在深圳城市的佛系碼農?????♀?,如果你喜歡我的文章??,可以通過點贊幫我聚集靈力??,

個人github倉庫地址: https:github.com/aehyok

本文講解代碼倉庫地址 : https:github.com/aehyok/vue-qiankun 目前基于dev分支進行開發和測驗

本demo已部署騰訊云 http://vue.tuokecat.com(服務器配置較低,如有訪問比較慢,請耐心等待)

table封裝路徑為根路徑下的 vue-qiankun/common/components/form/

form表單json配置生成器

  • 1、 在PC端日常的使用中,使用最多的莫過于表單和串列了,故此對table串列和form表單進行了統一的封裝,通過json配置就可以快速適配table串列和form表單,

  • 2、本章節主要記錄自己的form表單封裝

  • 3、封裝思路

    • A、根據布局,一行一列默認可不設定(columnSpan設定為24),一行兩列可設定引數columnSpan設定為12,后續以此類推

    • B、根據不同的欄位型別,分別對應子組件進行渲染

    • C、子組件根據不同的型別,以及配置的型別欄位進行渲染和資料系結

    • D、子組件可以設定必填項和rules表單驗證規則

    • E、可以通過設定欄位的值,去控制其他欄位的展示和隱藏

    • F、下拉等字典型別資料,可統一設定讀取介面資料,也可以根據需要進行傳遞當前陣列資料

    • G、圖片上傳可設定上傳介面,并可設定上傳多張圖片

    • H、富文本編輯器也可以作為組件嵌入表單

    • I、 ......


先來一個完整的效果展示

  • 1、form表單配置json
  {
  "formListItem": [
    {
      "name": "name1",
      "type": "text",
      "title": "欄目標題",
      "required": true
    },
    {
      "name": "name",
      "type": "text",
      "title": "欄目名稱"
    },
    {
      "name": "total",
      "type": "number",
      "title": "欄目數量",
      "required": true
    },
    {
      "name": "count",
      "type": "number",
      "title": "瀏覽數量"
    },
    {
      "name": "descript",
      "type": "textarea",
      "title": "備注",
      "required": true,
      "rows": 3
    },
    {
      "name": "content",
      "type": "textarea",
      "title": "內容",
      "rows": 3
    },
    {
      "name": "startDate",
      "type": "date",
      "title": "開始日期",
      "required": true
    },
    {
      "name": "endDate",
      "type": "date",
      "title": "結束日期"
    },
    {
      "name": "isValid",
      "type": "switch",
      "title": "是否有效"
    },
    {
      "name": "isExpired",
      "type": "switch",
      "title": "是否過期",
      "required": true
    },
    {
      "name": "type",
      "type": "radio",
      "dictionary": [
        {
          "code": 1,
          "name": "橫版欄目"
        },
        {
          "code": 2,
          "name": "豎版欄目"
        }
      ],
      "title": "欄目型別",
      "controls": [
        {
          "value": 1,
          "showCondition": [
            {
              "name": "show",
              "type": "radio",
              "dictionary": [
                {
                  "code": 1,
                  "name": "China"
                },
                {
                  "code": 2,
                  "name": "English"
                }
              ],
              "title": "測驗型別",
              "required": true
            },
            {
              "name": "image1",
              "type": "ImageTypeView",
              "title": "檔案"
            }
          ]
        },
        {
          "value": 2,
          "showCondition": [
            {
              "name": "isValids",
              "type": "switch",
              "title": "是否有效"
            }
          ]
        }
      ]
    },
    {
      "name": "requireType",
      "type": "radio",
      "dictionary": [
        {
          "code": 1,
          "name": "型別一"
        },
        {
          "code": 2,
          "name": "型別二"
        }
      ],
      "title": "圖文型別",
      "required": true
    },
    {
      "name": "range",
      "type": "checkbox",
      "title": "發布范圍",
      "dictionary": [
        {
          "code": 1,
          "name": "范圍一"
        },
        {
          "code": 2,
          "name": "范圍二"
        }
      ],
      "required": true
    },
    {
      "name": "dateRange",
      "type": "daterange",
      "title": "日期范圍"
    },
    {
      "name": "creType",
      "type": "select",
      "dictionary": [
        {
          "code": 1,
          "name": "身份證"
        },
        {
          "code": 2,
          "name": "居住證"
        }
      ],
      "title": "證件型別"
    },
    {
      "name": "image",
      "type": "image",
      "title": "頭像"
    }
  ],
  "formData": {
    "name": "主選單欄目",
    "total": null,
    "count": null,
    "createDate": 1606730360386,
    "type": 1,
    "creType": "",
    "range": [],
    "isExpired": false,
    "isValid": true
  }
}
  • 2、 最后的效果圖片

效果展示的在線預覽頁面為 http://vue.tuokecat.com/#/webpack-app/form

具體代碼可根據路由進行搜索

欄位配置詳細介紹

1、靜態文本 static

```javascript
  {
    type: "static",  // 欄位型別只讀文本
    name: "name",   //與后臺對接欄位
    title: "名稱",  // 前端展示欄位
  },
```

2、文本框 text

```javascript
  {
    type: "text",  // 欄位型別文本框
    name: "name",  //與后臺對接欄位
    title: "域名",  // 前端展示欄位
    required: true, // 必填項設定
    maxlength: 50,  // 字串長度限制
    showwordlimit: true, // 是否顯示字串長度
    placeholder:"請輸入10個字符以內的名稱", // 占位文本提示
    append: ".com",  // 文本框后置內容
    // rules // 陣列
    rules: [
      { pattern: /(^[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9])?$)/, message: '請輸入數字最多兩位小數' }
    ],
  },
```

3、文本域 textarea

```javascript
  {
    type: "textarea",  // 欄位型別文本域
    name: "name",  //與后臺對接欄位
    title: "備注",  // 前端展示欄位
    required: true, // 必填項設定
    placeholder:"請輸入10個字符以內的名稱", // 占位文本提示
    rows: 4, //  輸入框行數
    minlength: 100, // 最小輸入長度
    maxlength: 5000,  // 最大輸入長度
    showwordlimit: true, // 是否顯示字串長度
    // rules // 陣列
    rules: [
      { pattern: /(^[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9])?$)/, message: '請輸入數字最多兩位小數' }
    ],
  },
```

4、下拉框 select

```javascript
  {
    type: "select",  // 欄位型別下拉框
    name: "options",   //與后臺對接欄位
    title: "型別",  // 前端展示欄位
    required: true, // 必填項設定
    placeholder:"請選擇型別",  // 占位文本提示
    // dictionary  可直接傳遞下拉資料,也可以傳遞字典中的typeCode,通過內部介面獲取
    dictionary: 7010, // 7010為字典中維護的typecode
    dictionary:[
      {
        code: 1, name:"圖片",
      },
      {
        code: 2, name:"視頻"
      }
    ],
    multiple: true, // 下拉串列可以多選
    // rules // 正則匹配
    rules: [
      { pattern: /(^[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9])?$)/, message: '只能選擇*******' }
    ],
    // 點擊下來觸發切換聯動的事件,為一個函式
    changeFunction: function(){}
  },
```

5、富文本 editor

```javascript
  {
    type: "editor",  // 欄位型別富文本
    name: "content",   //與后臺對接欄位
    title: "內容",  // 前端展示欄位
    required: true, // 必填項設定
    placeholder:"請選擇型別",  // 占位文本提示
    // rules // 正則匹配
    rules: [
      { pattern: /(^[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9])?$)/, message: '只能選擇*******' }
    ],
    maxLength:5000, // 富文本框最大長度,默認5000
  },
```

6、數值框 number

```javascript
  {
    type: "number",  // 欄位型別數值
    name: "num",  //與后臺對接欄位
    title: "總數",  // 前端展示欄位
    required: true, // 必填項設定
    placeholder:"請輸入10個字符以內的名稱", // 占位文本提示
    precision: 2,  // 小數點后的位數
    // rules // 陣列
    rules: [
      { pattern: /(^[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9])?$)/, message: '請輸入數字最多兩位小數' }
    ],
  },
```

7、省市區三級級聯選擇 citySelect

```javascript
  {
    type: "citySelect",  // 欄位型別省市區
    name: "region",  //與后臺對接欄位
    title: "戶籍地",  // 前端展示欄位
    required: true, // 必填項設定
    placeholder:"請輸入10個字符以內的名稱", // 占位文本提示
    // rules // 陣列
    rules: [
      { pattern: /(^[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9])?$)/, message: '請輸入數字最多兩位小數' }
    ],
  },
```   

8、 圖片上傳 image

```javascript
  {
    type: "image",  // 欄位型別圖片
    name: "images",  //與后臺對接欄位
    title: "上傳圖片",  // 前端展示欄位
    required: true, // 必填項設定
    placeholder:"請上傳圖片", // 占位文本提示
    // rules // 陣列
    rules: [
      { pattern: /(^[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9])?$)/, message: '請輸入數字最多兩位小數' }
    ],
  },
```      

9、 視頻上傳 video

```javascript
  {
    type: "video",  // 欄位型別視頻
    name: "images",  //與后臺對接欄位
    title: "上傳視頻",  // 前端展示欄位
    required: true, // 必填項設定
    placeholder:"請上傳視頻", // 占位文本提示
    // rules // 陣列
    rules: [
      { pattern: /(^[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9])?$)/, message: '請輸入數字最多兩位小數' }
    ],
  },
```      

10、 日期 date

```javascript
  {
    type: "date",  // 欄位型別日期
    name: "date",  //與后臺對接欄位
    title: "日期",  // 前端展示欄位
    required: true, // 必填項設定
    placeholder:"請選擇日期", // 占位文本提示
    // rules // 陣列
    rules: [
      { pattern: /(^[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9])?$)/, message: '請輸入數字最多兩位小數' }
    ],
  },
```      

11、 日期范圍 daterange

```javascript
  {
    type: "daterange",  // 欄位型別日期
    name: "date",  //與后臺對接欄位
    title: "日期范圍",  // 前端展示欄位
    required: true, // 必填項設定
    placeholder:"請選擇日期", // 占位文本提示
    // rules // 陣列
    rules: [
      { pattern: /(^[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9])?$)/, message: '請輸入數字最多兩位小數' }
    ],
  },
```  

附上整個呼叫的所有代碼

  • 1、template 模板代碼
  <template>
    <div>
      <sl-table
        :list="list"
        @handleSelectionChange="handleSelectionChange"
        :columns="columns"
        :operates="operates"
        v-model:pageModel="pageModel"
        @search="search"
      >
      </sl-table>
    </div>
  </template>
  • 2、'script'標簽代碼
import SlTable from '../../../common/components/table/index.vue'
import { defineComponent, reactive, toRefs } from "vue";
import { list_test, columns_test } from "./tableConfig";
export default defineComponent({
components: { SlTable },
setup() {
  // 選中行
  const handleSelectionChange = (val) => {
    console.log("handleSelectionChange-val:", val);
  };
  // 編輯
  const handleDetail = (index, row, idx) => {
    console.log("index:", index, idx);
    console.log("row:", row);
  };
  // 洗掉
  const handleDel = (index, row) => {
    console.log(" index:", index);
    console.log(" row:", row);
  };

  const state = reactive({
    pageModel: {
      page: 1,
      limit: 10,
      total: 17
    },
    list: [], // table資料
    columns: [], // 需要展示的列
    operates: {
      width: 200,
      fixed: "right",
      list: [
        {
          id: "1",
          label: "查看",
          type: "text",
          show: true,
          disabled: false,
          method: (index, row, ss) => {
            handleDetail(index, row, ss);
          }
        },
        {
          id: "2",
          label: "洗掉",
          type: "text",
          show: true,
          disabled: false,
          method: (index, row) => {
            handleDel(index, row);
          }
        }
      ]
    } // 列操作按鈕
  });

  state.list = list_test;
  state.columns = columns_test;
  const search = () => {
    state.list = [...state.list];
    console.log(state.pageModel, "state.pageModel");
  };
  return {
    ...toRefs(state),
    handleSelectionChange,
    search
  };
}
});
  • 3、其中模擬資料和欄位配置在單獨的檔案中tableConfig
    const list_test =
[
  {
      id: "24",
      title: "編號3",
      state: 0,
      createTime:"2021-09-23T17:57:09",
      remark: "自定義"
  },
  {
      id: "23",
      title: "編號4",
      state: 1,
      createTime:"2021-09-23T17:57:19",
      remark: "自定義"
  },
  {
      id: "23",
      title: "編號5",
      state: 2,
      createTime:"2021-09-23T17:57:29",
      remark: "自定義"
  },
  {
     id: "23",
     title: "編號5",
     state: 1,
     createTime:"2021-09-23T17:57:39",
     remark: "自定義111"
  },
  {
      id: "223",
      title: "編號3",
      state: 1,
      createTime:"2021-09-23T17:57:49",
      remark: "22222"
  },
  {
      id: "2444",
      title: "編號3",
      state: 0,
      createTime:"2021-09-23T17:57:59",
      remark: "333333"
  },
  {
    id: "24",
    title: "編號3",
    state: 0,
    createTime:"2021-09-23T17:57:09",
    remark: "自定義"
},
{
    id: "23",
    title: "編號4",
    state: 1,
    createTime:"2021-09-23T17:57:19",
    remark: "自定義"
},
{
    id: "23",
    title: "編號5",
    state: 2,
    createTime:"2021-09-23T17:57:29",
    remark: "自定義"
},
{
   id: "23",
   title: "編號5",
   state: 1,
   createTime:"2021-09-23T17:57:39",
   remark: "自定義111"
},
{
    id: "223",
    title: "編號3",
    state: 1,
    createTime:"2021-09-23T17:57:49",
    remark: "22222"
},
{
    id: "2444",
    title: "編號3",
    state: 0,
    createTime:"2021-09-23T17:57:59",
    remark: "333333"
}
]

const columns_test = [
  {
      type:'checkbox',
  },
  {
    prop: "id",
    label: "編號",
    type:'index',
    align: "center"
  },
  {
    prop: "title",
    label: "標題",
    align: "center",
  },
  {
    prop: "createTime",
    label: "創建時間",
    align: "center",
    dateFormat: "yyyy-MM-dd HH:mm:ss",
    sortable: true
  },
  {
    prop: "state",
    label: "狀態",
    align: "center",
    dictionary: [
      { code: 0, name: "待審核"},
      { code: 1, name: "已審核"},
      { code: 2, name: "審核中"},
    ]
  },
  {
    prop:"custom",
    label:"自定義",
    align: "center",
    html: (row, column) => {
      return row.title==="編號3" ? `<span style="color: red;">${ row.remark }</span>`:`未定義`
    }
  }
]
export {
  list_test,
  columns_test
}

最后的最后

https://github.com/aehyok/vue-qiankun
本文中不涉及到代碼,有關代碼問題可以訪問文章開頭的微前端github demo 倉庫,github倉庫將會保持持續更新,不斷優化小demo,

https://github.com/aehyok/2021
最后自己每天作業中的筆記記錄倉庫,主要以文章鏈接和問題處理方案為主,

轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/330052.html

標籤:其他

上一篇:如何查找Visual Studio Code中的內置命令并通過executeCommand來執行

下一篇:如何過多文字顯示更多按鈕,點擊可顯示更多文字或者隱藏部分文字

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • IEEE1588PTP在數字化變電站時鐘同步方面的應用

    IEEE1588ptp在數字化變電站時鐘同步方面的應用 京準電子科技官微——ahjzsz 一、電力系統時間同步基本概況 隨著對IEC 61850標準研究的不斷深入,國內外學者提出基于IEC61850通信標準體系建設數字化變電站的發展思路。數字化變電站與常規變電站的顯著區別在于程序層傳統的電流/電壓互 ......

    uj5u.com 2020-09-10 03:51:52 more
  • HTTP request smuggling CL.TE

    CL.TE 簡介 前端通過Content-Length處理請求,通過反向代理或者負載均衡將請求轉發到后端,后端Transfer-Encoding優先級較高,以TE處理請求造成安全問題。 檢測 發送如下資料包 POST / HTTP/1.1 Host: ac391f7e1e9af821806e890 ......

    uj5u.com 2020-09-10 03:52:11 more
  • 網路滲透資料大全單——漏洞庫篇

    網路滲透資料大全單——漏洞庫篇漏洞庫 NVD ——美國國家漏洞庫 →http://nvd.nist.gov/。 CERT ——美國國家應急回應中心 →https://www.us-cert.gov/ OSVDB ——開源漏洞庫 →http://osvdb.org Bugtraq ——賽門鐵克 →ht ......

    uj5u.com 2020-09-10 03:52:15 more
  • 京準講述NTP時鐘服務器應用及原理

    京準講述NTP時鐘服務器應用及原理京準講述NTP時鐘服務器應用及原理 安徽京準電子科技官微——ahjzsz 北斗授時原理 授時是指接識訓通過某種方式獲得本地時間與北斗標準時間的鐘差,然后調整本地時鐘使時差控制在一定的精度范圍內。 衛星導航系統通常由三部分組成:導航授時衛星、地面檢測校正維護系統和用戶 ......

    uj5u.com 2020-09-10 03:52:25 more
  • 利用北斗衛星系統設計NTP網路時間服務器

    利用北斗衛星系統設計NTP網路時間服務器 利用北斗衛星系統設計NTP網路時間服務器 安徽京準電子科技官微——ahjzsz 概述 NTP網路時間服務器是一款支持NTP和SNTP網路時間同步協議,高精度、大容量、高品質的高科技時鐘產品。 NTP網路時間服務器設備采用冗余架構設計,高精度時鐘直接來源于北斗 ......

    uj5u.com 2020-09-10 03:52:35 more
  • 詳細解讀電力系統各種對時方式

    詳細解讀電力系統各種對時方式 詳細解讀電力系統各種對時方式 安徽京準電子科技官微——ahjzsz,更多資料請添加VX 衛星同步時鐘是我京準公司開發研制的應用衛星授時時技術的標準時間顯示和發送的裝置,該裝置以M國全球定位系統(GLOBAL POSITIONING SYSTEM,縮寫為GPS)或者我國北 ......

    uj5u.com 2020-09-10 03:52:45 more
  • 如何保證外包團隊接入企業內網安全

    不管企業規模的大小,只要企業想省錢,那么企業的某些服務就一定會采用外包的形式,然而看似美好又經濟的策略,其實也有不好的一面。下面我通過安全的角度來聊聊使用外包團的安全隱患問題。 先看看什么服務會使用外包的,最常見的就是話務/客服這種需要大量重復性、無技術性的服務,或者是一些銷售外包、特殊的職能外包等 ......

    uj5u.com 2020-09-10 03:52:57 more
  • PHP漏洞之【整型數字型SQL注入】

    0x01 什么是SQL注入 SQL是一種注入攻擊,通過前端帶入后端資料庫進行惡意的SQL陳述句查詢。 0x02 SQL整型注入原理 SQL注入一般發生在動態網站URL地址里,當然也會發生在其它地發,如登錄框等等也會存在注入,只要是和資料庫打交道的地方都有可能存在。 如這里http://192.168. ......

    uj5u.com 2020-09-10 03:55:40 more
  • [GXYCTF2019]禁止套娃

    git泄露獲取原始碼 使用GET傳參,引數為exp 經過三層過濾執行 第一層過濾偽協議,第二層過濾帶引數的函式,第三層過濾一些函式 preg_replace('/[a-z,_]+\((?R)?\)/', NULL, $_GET['exp'] (?R)參考當前正則運算式,相當于匹配函式里的引數 因此傳遞 ......

    uj5u.com 2020-09-10 03:56:07 more
  • 等保2.0實施流程

    流程 結論 ......

    uj5u.com 2020-09-10 03:56:16 more
最新发布
  • 使用Django Rest framework搭建Blog

    在前面的Blog例子中我們使用的是GraphQL, 雖然GraphQL的使用處于上升趨勢,但是Rest API還是使用的更廣泛一些. 所以還是決定回到傳統的rest api framework上來, Django rest framework的官網上給了一個很好用的QuickStart, 我參考Qu ......

    uj5u.com 2023-04-20 08:17:54 more
  • 記錄-new Date() 我忍你很久了!

    這里給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 大家平時在開發的時候有沒被new Date()折磨過?就是它的諸多怪異的設定讓你每每用的時候,都可能不小心踩坑。造成程式意外出錯,卻一下子找不到問題出處,那叫一個煩透了…… 下面,我就列舉它的“四宗罪”及應用思考 可惡的四宗罪 1. Sa ......

    uj5u.com 2023-04-20 08:17:47 more
  • 使用Vue.js實作文字跑馬燈效果

    實作文字跑馬燈效果,首先用到 substring()截取 和 setInterval計時器 clearInterval()清除計時器 效果如下: 實作代碼如下: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta ......

    uj5u.com 2023-04-20 08:12:31 more
  • JavaScript 運算子

    JavaScript 運算子/運算子 在 JavaScript 中,有一些運算子可以使代碼更簡潔、易讀和高效。以下是一些常見的運算子: 1、可選鏈運算子(optional chaining operator) ?.是可選鏈運算子(optional chaining operator)。?. 可選鏈操 ......

    uj5u.com 2023-04-20 08:02:25 more
  • CSS—相對單位rem

    一、概述 rem是一個相對長度單位,它的單位長度取決于根標簽html的字體尺寸。rem即root em的意思,中文翻譯為根em。瀏覽器的文本尺寸一般默認為16px,即默認情況下: 1rem = 16px rem布局原理:根據CSS媒體查詢功能,更改根標簽的字體尺寸,實作rem單位隨螢屏尺寸的變化,如 ......

    uj5u.com 2023-04-20 08:02:21 more
  • 我的第一個NPM包:panghu-planebattle-esm(胖虎飛機大戰)使用說明

    好家伙,我的包終于開發完啦 歡迎使用胖虎的飛機大戰包!! 為你的主頁添加色彩 這是一個有趣的網頁小游戲包,使用canvas和js開發 使用ES6模塊化開發 效果圖如下: (覺得圖片太sb的可以自己改) 代碼已開源!! Git: https://gitee.com/tang-and-han-dynas ......

    uj5u.com 2023-04-20 08:01:50 more
  • 如何在 vue3 中使用 jsx/tsx?

    我們都知道,通常情況下我們使用 vue 大多都是用的 SFC(Signle File Component)單檔案組件模式,即一個組件就是一個檔案,但其實 Vue 也是支持使用 JSX 來撰寫組件的。這里不討論 SFC 和 JSX 的好壞,這個仁者見仁智者見智。本篇文章旨在帶領大家快速了解和使用 Vu ......

    uj5u.com 2023-04-20 08:01:37 more
  • 【Vue2.x原始碼系列06】計算屬性computed原理

    本章目標:計算屬性是如何實作的?計算屬性快取原理以及洋蔥模型的應用?在初始化Vue實體時,我們會給每個計算屬性都創建一個對應watcher,我們稱之為計算屬性watcher ......

    uj5u.com 2023-04-20 08:01:31 more
  • http1.1與http2.0

    一、http是什么 通俗來講,http就是計算機通過網路進行通信的規則,是一個基于請求與回應,無狀態的,應用層協議。常用于TCP/IP協議傳輸資料。目前任何終端之間任何一種通信方式都必須按Http協議進行,否則無法連接。tcp(三次握手,四次揮手)。 請求與回應:客戶端請求、服務端回應資料。 無狀態 ......

    uj5u.com 2023-04-20 08:01:10 more
  • http1.1與http2.0

    一、http是什么 通俗來講,http就是計算機通過網路進行通信的規則,是一個基于請求與回應,無狀態的,應用層協議。常用于TCP/IP協議傳輸資料。目前任何終端之間任何一種通信方式都必須按Http協議進行,否則無法連接。tcp(三次握手,四次揮手)。 請求與回應:客戶端請求、服務端回應資料。 無狀態 ......

    uj5u.com 2023-04-20 08:00:32 more