亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

vxe-table中vxe-grid(高級(jí)表格)的使用方法舉例

 更新時(shí)間:2024年05月11日 10:14:51   作者:Gemini_Kanon  
vxe-table是一個(gè)基于vue的表格組件,下面這篇文章主要給大家介紹了關(guān)于vxe-table中vxe-grid(高級(jí)表格)的使用方法,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下

官網(wǎng)傳送門,廢話不多說(shuō)了,經(jīng)過(guò)自己半個(gè)月左右的踩雷經(jīng)歷,發(fā)篇博客記錄一下,方便自己也方便他人。由于項(xiàng)目需求時(shí)間問(wèn)題,前面的表格都沒(méi)看直接使用了vxe-grid高級(jí)表格,下面上代碼。

<vxe-grid
  ref='xGrid'
  v-bind="gridOptions"
  @cell-click="cellClickEvent" //設(shè)置表格編輯方式點(diǎn)擊列觸發(fā),該方法是點(diǎn)擊某列時(shí)觸發(fā)的方法
  @edit-closed="editClosedEvent"> //當(dāng)被編輯的列失去焦點(diǎn)時(shí)即為編輯結(jié)束,觸發(fā)該方法
    <template #product_item="{ data }">   //這里是動(dòng)態(tài)配置表單項(xiàng)productList是從后臺(tái)請(qǐng)求到的數(shù)據(jù)經(jīng)過(guò)處理后要渲染到option中的值,value、label
        <vxe-select v-model="data.topic" placeholder="選擇項(xiàng)目名稱" transfer>
          <vxe-option v-for="item in productList" :key="item.value" :value="item.value" :label="item.label" />
        </vxe-select>
    </template>
    <template #operate_item="{ data }">
        <vxe-button type="submit" status="primary" content="查詢" />
        <vxe-button type="reset" content="重置" @click="haha(data)" />   //文檔中自帶的重置按鈕如果不攔截的話無(wú)法對(duì)自定義的表單數(shù)據(jù)進(jìn)行操作,故這里需要自定義一個(gè)方法
    </template>
</vxe-grid>

下面是核心代碼寫(xiě)在data里,js,大部分配置官網(wǎng)上都有,可以找到對(duì)應(yīng)API,我就著重寫(xiě)一下我踩雷的地方,代碼中會(huì)有注釋,請(qǐng)耐心觀看

gridOptions: {
    border:true,   //是否帶邊框
    stripe: true,   //是否帶斑馬紋
    round: true,   //邊框是否圓角
    showHeaderOverflow: true,   //表頭內(nèi)容過(guò)長(zhǎng)時(shí)是否顯示省略號(hào)
    showOverflow: true,   //所有內(nèi)容過(guò)長(zhǎng)時(shí)是否顯示省略號(hào)
    keepSource: true,   //是否保持原始值狀態(tài)
    id: 'full_edit_1',   //唯一標(biāo)識(shí),某些功能會(huì)用到,我這里沒(méi)有用到,可以忽略
    rowConfig: {   //行配置信息
      isHover: true
    },
    columnConfig: {   //列配置信息
      resizable: true
    },
    printConfig: {   //打印配置項(xiàng),具體的看文檔吧,很詳細(xì)了,注意columns里的field要和實(shí)際數(shù)據(jù)的key對(duì)應(yīng)上
      columns: [
        { field: 'name' },
        { field: 'email' },
        { field: 'nickname' },
        { field: 'age' },
        { field: 'amount' }
      ]
    },
    sortConfig: {   //排序配置項(xiàng)
      trigger: 'cell',
      remote: true
    },
    filterConfig: {   //篩選配置項(xiàng)
      remote: true
    },
    pagerConfig: {   //配置分頁(yè)
      pageSize: 15,
      pageSizes: [5, 10, 15, 20, 50, 100, 200, 500, 1000],
      layouts: ['Sizes', 'PrevJump', 'PrevPage', 'Number', 'NextPage', 'NextJump', 'FullJump', 'Total']
    },
    formConfig: {   //表單配置項(xiàng):就是查詢條件,items中的field一定要和實(shí)體類名稱對(duì)應(yīng)上,方便管理。這里只放一個(gè)input框和下拉框了,其他的自己探索吧,API里都有
      titleWidth: 100,
      titleAlign: 'right',
      items: [
        {
          field: 'topic',
          title: '項(xiàng)目名稱',
          span: 4,
          slots: {
            default: 'product_item'   //這里要和上面動(dòng)態(tài)配置的表單項(xiàng)名稱對(duì)應(yīng)
          }
        },
        {
          field: 'status',
          title: '狀態(tài)',
          span: 4,
          folding: false,
          itemRender: {
            name: '$select',
            options: [
              { label: '待處理', value: '待處理' },
              { label: '處理中', value: '處理中' },
              { label: '已計(jì)劃', value: '已計(jì)劃' },
              { label: '已完成', value: '已完成' },
              { label: '已關(guān)閉', value: '已關(guān)閉' }
            ],
            props: { placeholder: '請(qǐng)選擇項(xiàng)目狀態(tài)' }
          }
        },
        { span: 24, align: 'center', slots: { default: 'operate_item' } }   //查詢重置按鈕
      ]
    },
    toolbarConfig: {   //工具欄配置項(xiàng)
      // 這種寫(xiě)法是官方文檔寫(xiě)法,只會(huì)執(zhí)行API中對(duì)應(yīng)的方法,若想自己實(shí)現(xiàn)按鈕功能需要自定義插槽,如下
      // buttons: [
      //   { code: 'delete', status: 'danger', name: '直接刪除', icon: 'vxe-icon-delete' },
      // ],
      // 自定義插槽
      slots: {
        buttons: ({ row }) => {
          return <el-button-group>
                    <el-button icon="el-icon-plus" type="primary" onClick={() => this.showDialog()}>新建工單</el-button>
                    <el-button icon="el-icon-delete" type="danger" onClick={() => this.$refs.xGrid.commitProxy('delete')} style="margin-left: 10px;">直接刪除</el-button>
                 </el-button-group>
        }
      },
      refresh: true,
      import: true,
      export: true,
      print: true,
      zoom: true,
      custom: true
    },
    proxyConfig: {   //數(shù)據(jù)代理配置項(xiàng)
      seq: true, // 啟用動(dòng)態(tài)序號(hào)代理,每一頁(yè)的序號(hào)會(huì)根據(jù)當(dāng)前頁(yè)數(shù)變化
      sort: true, // 啟用排序代理,當(dāng)點(diǎn)擊排序時(shí)會(huì)自動(dòng)觸發(fā) query 行為
      filter: true, // 啟用篩選代理,當(dāng)點(diǎn)擊篩選時(shí)會(huì)自動(dòng)觸發(fā) query 行為
      form: true, // 啟用表單代理,當(dāng)點(diǎn)擊表單提交按鈕時(shí)會(huì)自動(dòng)觸發(fā) reload 行為
      // 對(duì)應(yīng)響應(yīng)結(jié)果 { result: [], page: { total: 100 } }
      props: {
        result: 'result', // 配置響應(yīng)結(jié)果列表字段
        total: 'page.total' // 配置響應(yīng)結(jié)果總頁(yè)數(shù)字段
      },
      // 只接收Promise,具體實(shí)現(xiàn)自由發(fā)揮
      ajax: {
        // 當(dāng)點(diǎn)擊工具欄查詢按鈕或者手動(dòng)提交指令 query或reload 時(shí)會(huì)被觸發(fā)
        query: ({ page, sorts, filters, form }) => {
          const queryParams = Object.assign({}, form)
          // 處理排序條件
          const firstSort = sorts[0]
          if (firstSort) {
            queryParams.sort = firstSort.property
            queryParams.order = firstSort.order
          }
          // 處理篩選條件
          filters.forEach(({ property, values }) => {
            queryParams[property] = values.join(',')
          })
          queryParams.page = page.currentPage;
          queryParams.pageSize = page.pageSize;
          //自己在data中定義個(gè)baseUrl,用來(lái)訪問(wèn)后臺(tái)
          return XEAjax.post(`${this.baseUrl}/queryOrder`, queryParams)
        },
        // 當(dāng)點(diǎn)擊工具欄刪除按鈕或者手動(dòng)提交指令 delete 時(shí)會(huì)被觸發(fā)
        delete: ({ body }) => {
          return XEAjax.post(`${this.baseUrl}/deleteOrder`, JSON.stringify(body.removeRecords));
        },
        // 當(dāng)點(diǎn)擊工具欄保存按鈕或者手動(dòng)提交指令 save 時(shí)會(huì)被觸發(fā)(用自帶的添加按鈕的話會(huì)用到這個(gè)保存事件,我這里已經(jīng)自定義插槽按鈕事件了,故將該處注釋掉,而且需要實(shí)時(shí)保存的話也用不上這個(gè)按鈕)
        // save: ({ body }) => {
        //   return XEAjax.post(`${this.baseUrl}/updateOrder`, JSON.stringify(body.updateRecords)).then(
        //     res => xxx
        //   );
        // }
      }
    },
    columns: [   //列配置:將在這里顯示數(shù)據(jù),field要和實(shí)體類名稱對(duì)應(yīng)上
      { type: 'checkbox', field: 'id', title: '工單序號(hào)' },   //多選框
      { field: 'title',  title: '標(biāo)題' },
      {
        field: 'status',
        title: '狀態(tài)',
        width: 95,
        slots: {   //該處展示自定義插槽,可以將數(shù)據(jù)封裝到想用的組件里,視覺(jué)效果更佳
          default: ( {row} ) => {
            if (row.status == '待處理') {
              return <el-tag type="danger">{row.status}</el-tag>;
            }
            if (row.status == '處理中') {
              return <el-tag type="warning">{row.status}</el-tag>;
            }
            if (row.status == '已計(jì)劃') {
              return <el-tag type="info">{row.status}</el-tag>;
            }
            if (row.status == '已完成') {
              return <el-tag>{row.status}</el-tag>;
            }
            if (row.status == '已關(guān)閉') {
              return <el-tag type="success">{row.status}</el-tag>;
            }
          }
        },
        filters: [   //配置篩選條件,配置后表頭對(duì)應(yīng)列會(huì)有篩選圖標(biāo),點(diǎn)開(kāi)即可操作
          { label: '待處理', value: '待處理' },
          { label: '處理中', value: '處理中' },
          { label: '已計(jì)劃', value: '已計(jì)劃' },
          { label: '已完成', value: '已完成' },
          { label: '已關(guān)閉', value: '已關(guān)閉' }
        ],
        filterMultiple: false,   //篩選是否可多選
        editRender: {   //該處是列可編輯狀態(tài)下的編輯框,這里是一個(gè)靜態(tài)下拉框,下面有一個(gè)動(dòng)態(tài)下拉框也是我踩雷的地方
          name: '$select',
          options: [
            { label: '待處理', value: '待處理' },
            { label: '處理中', value: '處理中' },
            { label: '已計(jì)劃', value: '已計(jì)劃' },
            { label: '已完成', value: '已完成' },
            { label: '已關(guān)閉', value: '已關(guān)閉' }
          ],
          props: { placeholder: '請(qǐng)選擇工單狀態(tài)' }
        }
      },
      {   //該列是獲取后臺(tái)數(shù)據(jù)動(dòng)態(tài)渲染到頁(yè)面上的地方,踩雷好幾天
        field: 'charger',
        title: '負(fù)責(zé)人',
        editRender: {
          name: '$select',
          props: {
            value: [],
            options: [],   //用來(lái)顯示下拉框數(shù)據(jù)的地方
            optionProps: {   //下拉框option的配置,該處要有,否則點(diǎn)開(kāi)下拉框選值的時(shí)候?qū)?yīng)label不會(huì)高亮
              value: 'value',
              label: 'label'
            },
            multiple: true,   //可多選
            clearable: true,
            placeholder: '請(qǐng)選擇負(fù)責(zé)人',
            optionConfig: {
              useKey: true
            }
          }
        },
        formatter: this.formatCharger
      },
      {   //自定義插槽可以自定義事件
        slots: {
          default: ({ row }) => {
            return <el-button type="text" onClick={() => this.handleCell(row)}>詳情</el-button>
          }
        }
      }
    ],
    importConfig: {   //導(dǎo)入配置項(xiàng),暫時(shí)沒(méi)用到該功能沒(méi)深入研究,API上都有
      remote: true,
      importMethod: this.importMethod,
      types: ['xlsx'],
      modes: ['insert']
    },
    exportConfig: {   //導(dǎo)出配置項(xiàng),暫時(shí)沒(méi)用到該功能沒(méi)深入研究,API上都有
      remote: true,
      exportMethod: this.exportMethod,
      types: ['xlsx'],
      modes: ['current', 'selected', 'all']
    },
    checkboxConfig: {   //復(fù)選框配置項(xiàng)
      labelField: 'id',
      reserve: true,
      highlight: true,
      range: true
    },
    editRules: {   //列編輯規(guī)則
      charger: [
        { required: true, message: '負(fù)責(zé)人不能為空' }
      ]
    },
    editConfig: {   //可編輯配置項(xiàng)
      trigger: 'click',
      mode: 'cell',   //cell(單元格編輯模式),row(行編輯模式)
      showStatus: true
    }
  }

重置按鈕方法

haha(val) {
  //這里可以看到所有表單配置中的值
  console.log(val);
}

下面是列編輯是如果是下拉框如何請(qǐng)求后臺(tái)接口獲取數(shù)據(jù),并渲染到頁(yè)面上,寫(xiě)到method里,該處就是用到了上面的單元格點(diǎn)擊事件

//如果進(jìn)頁(yè)面就請(qǐng)求后臺(tái)數(shù)據(jù)渲染下拉框的話,它是沒(méi)有數(shù)據(jù)的,我也在網(wǎng)上找了很多解決辦法,要么找不到,要么代碼寫(xiě)的沒(méi)頭沒(méi)尾的,很不友好
//點(diǎn)擊列的時(shí)候判斷列屬性,如果是想要編輯的那個(gè)列再去后臺(tái)請(qǐng)求數(shù)據(jù),然后以下拉框的格式返回給option就有數(shù)據(jù)了
cellClickEvent({row, column}) {
  if (column.property == 'charger') {
    let list = [];
    // 該處是請(qǐng)求后臺(tái)的方法,封裝在別處了,直接用axios去請(qǐng)求也可
    getAllTeamUser(param).then(res => {
      for (let i = 0; i < res.data.length; i++) {
        let obj = {};
        obj.label = res.data[i].nickName;
        obj.value = res.data[i].openId;
        obj.key = res.data[i].openId;
        list.push(obj);
      }
    })
    column.editRender.props.options = list;
  }
}

下面是列編輯完后失去焦點(diǎn)自動(dòng)保存的方法,也是寫(xiě)在method里

editClosedEvent ({ row, column }) {
  const $table = this.$refs.xGrid;
  const field = column.property;
  const cellValue = row[field];
  // 判斷單元格值是否被修改
  if ($table.isUpdateByRow(row, field)) {
      setTimeout(() => {
        VXETable.modal.message({
          content: `保存成功!`,
          status: 'success'
        })
        // 局部更新單元格為已保存狀態(tài)
        $table.reloadRow(row, null, field)
        // 保存數(shù)據(jù)后執(zhí)行查詢事件重新渲染表格數(shù)據(jù),row就是你所編輯的行的數(shù)據(jù),該處row的值是你編輯后的值
        // 這里遇到一個(gè)問(wèn)題是:下拉框選擇值時(shí)只能拿到其value值,不像el-select中可以同時(shí)拿到label和value的值
        // 由于時(shí)間緊我這里是拿到value值到后臺(tái)數(shù)據(jù)庫(kù)查詢出其對(duì)應(yīng)的lebel值再進(jìn)行后續(xù)操作了,時(shí)間豐富的小伙伴可以深入研究一下
        XEAjax.post(`${this.baseUrl}/updateOrder`, JSON.stringify(row)).then(
          res => this.$refs.xGrid.commitProxy('query')
        );
      }, 300)
  }
}

vxe-grid 表格頭標(biāo)題設(shè)置及內(nèi)容合并列項(xiàng)

附:vxe-grid 表格頭標(biāo)題設(shè)置及內(nèi)容合并列項(xiàng)

1、vxe-grid 表格的高級(jí)使用: 自定義表格表頭標(biāo)題動(dòng)態(tài)添加,內(nèi)容列有合并項(xiàng);實(shí)現(xiàn)效果如下所示:

 2、vxe-grid 代碼部分設(shè)置,實(shí)現(xiàn)合并有兩種方式可以根據(jù)情況自由選定合并方式,代碼如下;

 <!--   :span-method="mergeRowMethod"  -->
<vxe-grid
            border
            ref="xGrid" 
            class="moz-style taskTable"
            row-class-name="my-vxe-table-row"
            resizable 
            :scroll-x="{enable: true}"
            :scroll-y="{enable: true}"
            :scrollToLeftOnChange="false" 
            :max-height="600"
            :loading="table.loading"  
            :columns="table.columns" 
            :data="table.dataSource"  
            :edit-config="table.editConfig"
            :menu-config="table.rightMenu" 
            :merge-cells="table.mergeCells" 
            @menu-click="menuClick"
            @edit-closed="editClosedEvent"
            @cell-click="fiveToggle" 
            >  
            <template #xh="{ row }">
                <span v-if="!row.isDictType" class="bl-center">{{ row.xh }}</span>
                <span v-if="row.isDictType" class="bl-left">{{ row.xh }}</span>
            </template>
            <template #text_edit="{ row, column }">
                <vxe-input v-if="!row.isDictType" v-model="row[column.field]" :type="column.fieldtype || 'text'"></vxe-input>
            </template>
            <template #date_edit="{ row, column }">
                <vxe-input v-model="row[column.field]" type="date" placeholder="請(qǐng)選擇日期時(shí)間" transfer @change="handleSubmitSave($event, row, column)"></vxe-input> 
            </template>
            <template #list_default="{ row, column }"> 
                 <span class="bl-center"> {{ DictSearch(row, column) }} </span>
            </template> 
            <template #list_edit="{ row, column }">
                <vxe-select v-if="!row.isDictType" v-model="row[column.field]" transfer clearable :placeholder="'請(qǐng)選擇' + column.title">
                    <vxe-option v-for="(item, index) in fxList" :key="index" :value="item.value" :label="item.text"></vxe-option>
                </vxe-select> 
            </template> 
        </vxe-grid> 

3、js 數(shù)據(jù)設(shè)置及方法設(shè)置實(shí)現(xiàn),如下所示:

// 數(shù)據(jù)內(nèi)容設(shè)置
data(){
      return {
        fxList: [], 
        table:{
            loading: false,
            mergeCells:[],
            rightMenu: {
                className: 'my-menus',
                body: {
                    options: [
                        [
                            { code: 'addRowOne', name: '新增' },
                            { code: 'handleDelete', name: '刪除' }, 
                        ]
                    ]
                }, 
            },
            isEdit: false,
            editConfig: { 
                trigger: 'click', 
                mode: 'cell', 
                showIcon:false,
                activeMethod : this.activeCellMethod
            },
            columns: [
            { title: '任務(wù)工作臺(tái)',
                align: 'center',
                children: [] , //注:其他表格頭設(shè)置在 children 內(nèi)設(shè)置列項(xiàng)即可
            } 
            ],  
            dataSource: [],
        }, 
      }
  },
 
// 方法設(shè)置
        // 通用行合并函數(shù)(將相同多列數(shù)據(jù)合并為一行)
       mergeRowMethod({ row, _rowIndex, column, visibleData }) {
           let that = this
           // console.log(row, _rowIndex, column, visibleData, '_rowIndex, column, visibleData')
           let col_span = that.table.columns[0].children.length || 0 
            if(row.isDictType == true){
                return { rowspan: 1, colspan: col_span }
            }   
       },
       // 計(jì)算合并列
       computMecall(dataSource, headList){
            this.table.mergeCells = [] 
            const headL = headList.length || 0
            const tabal_data = dataSource
            let MergeCell_row = 0
            let itemMergeCell = { row: MergeCell_row, rowspan: 1, colspan: headL, col: 0 }
            tabal_data.forEach((bitem, u)=>{
                if(bitem.isDictType){
                    itemMergeCell = { row: u, rowspan: 1, colspan: headL, col: 0 }
                    this.table.mergeCells.push(itemMergeCell)
                }
            })  
       }, 
       // 查字典
       DictSearch(row, column) {
            let res = ''  
            if(column.field in row){
                res = row[column.field]  
                this.fxList.forEach(item => {
                    if(item.value == res){
                        res = item.text
                    }
                })
            }
            return res
        }, 
   /********** 其他方法此處略過(guò),具體根據(jù)項(xiàng)目需求設(shè)定處理即可...... *********/

以上內(nèi)容僅供參考!

總結(jié) 

到此這篇關(guān)于vxe-table中vxe-grid(高級(jí)表格)使用方法的文章就介紹到這了,更多相關(guān)vxe-table vxe-grid高級(jí)表格使用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 解讀Vue實(shí)例的屬性及模板渲染

    解讀Vue實(shí)例的屬性及模板渲染

    這篇文章主要介紹了解讀Vue實(shí)例的屬性及模板渲染問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-12-12
  • vue里面的el-select綁定默認(rèn)值方式

    vue里面的el-select綁定默認(rèn)值方式

    這篇文章主要介紹了vue里面的el-select綁定默認(rèn)值方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • 老生常談vue3組件通信方式

    老生常談vue3組件通信方式

    這篇文章主要介紹了vue3組件通信方式,面試題經(jīng)常會(huì)問(wèn)到vue3組件間的通信方式,今天就通過(guò)實(shí)例代碼給大家詳細(xì)介紹下,對(duì)vue3組件通信相關(guān)知識(shí)感興趣的朋友一起看看吧
    2022-08-08
  • vue2.0 axios跨域并渲染的問(wèn)題解決方法

    vue2.0 axios跨域并渲染的問(wèn)題解決方法

    下面小編就為大家分享一篇vue2.0 axios跨域并渲染的問(wèn)題解決方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-03-03
  • 詳解vuex數(shù)據(jù)傳輸?shù)膬煞N方式及this.$store undefined的解決辦法

    詳解vuex數(shù)據(jù)傳輸?shù)膬煞N方式及this.$store undefined的解決辦法

    這篇文章主要介紹了vuex數(shù)據(jù)傳輸?shù)膬煞N方式 及 this.$store undefined的解決辦法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • 解決VUE的對(duì)話框el-dialog點(diǎn)擊外部消失問(wèn)題

    解決VUE的對(duì)話框el-dialog點(diǎn)擊外部消失問(wèn)題

    這篇文章主要介紹了解決VUE的對(duì)話框el-dialog點(diǎn)擊外部消失問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • vue.js如何將echarts封裝為組件一鍵使用詳解

    vue.js如何將echarts封裝為組件一鍵使用詳解

    Echarts 、 Remodal和Pikaday是我們?cè)陂_(kāi)發(fā)后臺(tái)管理類網(wǎng)站時(shí)常用的三個(gè)第三方組件,下面這篇文章主要給大家介紹了關(guān)于vue.js如何將echarts封裝為組件一鍵使用的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下。
    2017-10-10
  • Vue組件實(shí)現(xiàn)評(píng)論區(qū)功能

    Vue組件實(shí)現(xiàn)評(píng)論區(qū)功能

    這篇文章主要為大家詳細(xì)介紹了Vue組件實(shí)現(xiàn)評(píng)論區(qū)功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • 一文詳解Vue中內(nèi)存泄漏的場(chǎng)景與預(yù)防技巧

    一文詳解Vue中內(nèi)存泄漏的場(chǎng)景與預(yù)防技巧

    即便是功能強(qiáng)大的?Vue.js?也無(wú)法完全避免內(nèi)存泄漏的問(wèn)題,內(nèi)存泄漏不僅會(huì)影響應(yīng)用的性能,還可能導(dǎo)致瀏覽器崩潰,下面我們來(lái)看看Vue?中常見(jiàn)的內(nèi)存泄漏場(chǎng)景以及如何避免這些問(wèn)題吧
    2024-12-12
  • Vue數(shù)據(jù)代理的原理和實(shí)現(xiàn)

    Vue數(shù)據(jù)代理的原理和實(shí)現(xiàn)

    數(shù)據(jù)代理是什么?通過(guò)一個(gè)對(duì)象代理,對(duì)另一個(gè)對(duì)象中屬性的操作,簡(jiǎn)單就是說(shuō):可以通過(guò)?對(duì)象b?對(duì)?對(duì)象a?中的屬性進(jìn)行操作,這里我學(xué)到的數(shù)據(jù)代理是用Object.defineProperty這個(gè)方法進(jìn)行操作
    2022-11-11

最新評(píng)論