最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

從Vue2升級Vue3過程中遇到作用域插槽語法變更問題的解決方法

 更新時(shí)間:2026年02月12日 09:53:32   作者:愛看星星的豬_  
在將項(xiàng)目從 Vue 2 升級到 Vue 3 的過程中,遇到了兩處典型的兼容性問題,主要涉及 作用域插槽語法變更 和 響應(yīng)式數(shù)據(jù)類型處理差異,本文通過具體代碼示例,說明問題原因、Vue 版本機(jī)制差異,并給出推薦改法,需要的朋友可以參考下

一、問題代碼片段及功能說明

場景 1:表格中動(dòng)態(tài)字段的樣式與標(biāo)題控制(輸入框)

<!-- Vue 2 原始寫法 -->
<template slot-scope="scope">
  <el-input-number
    :class="{ 'text-red': originTableDataCopy[scope.$index]['EXT_FIELD' + (firstChidIndex + 1)]?.split('?')[1] !== 'null' }"
    :title="originTableDataCopy[scope.$index]['EXT_FIELD' + (firstChidIndex + 1)]?.split('?')[1] || ''"
    v-model="scope.row['EXT_FIELD' + (firstChidIndex + 1)]"
  />
</template>

功能說明

  • 根據(jù)字段值是否包含 ?error 形式的后綴(如 "100?超限"),決定是否顯示紅色樣式;
  • title 顯示錯(cuò)誤信息(即 ? 后的內(nèi)容);
  • 使用 v-model 雙向綁定當(dāng)前行的擴(kuò)展字段。

場景 2:更復(fù)雜的動(dòng)態(tài)字段名與條件渲染

<!-- Vue 2 原始寫法 -->
<template slot-scope="scope">
  <el-input-number
    :class="{ 'text-red': 
      loanAccounttype === 'issued' &&
      originTableDataCopy[scope.$index]['EXT_FIELD.' + firstChid.functFldEnNm + (index + 1)]?.split('?')[1] &&
      originTableDataCopy[scope.$index]['EXT_FIELD.' + firstChid.functFldEnNm + (index + 1)]?.split('?')[1] !== 'null'
    }"
    v-model="scope.row['EXT_FIELD.' + firstChid.functFldEnNm + (index + 1)]"
    v-if="!secondChid.name?.includes('參考值')"
  />
  <span v-else>{{ scope.row['REF_VALUE_0'] }}...</span>
</template>

功能說明

  • 字段名由多個(gè)變量拼接生成(如 EXT_FIELD.income1);
  • 僅當(dāng) loanAccounttype === 'issued' 且字段包含非 'null' 錯(cuò)誤信息時(shí),標(biāo)紅;
  • 若字段為“參考值”,則不顯示輸入框,改用文本展示。

二、Vue 2 與 Vue 3 的機(jī)制差異

維度Vue 2Vue 3
作用域插槽語法<template slot-scope="scope"><template #default="{ row, $index }">
插槽參數(shù)scope 是對象,含 row, $index 等屬性直接解構(gòu) { row, $index }$index 仍可用但非必須
$index 是否存在? 存在? 存在(作為默認(rèn)屬性),但不再通過 scope.$index 訪問
響應(yīng)式代理方式Object.defineProperty + __ob__Proxy 包裝,控制臺顯示為 Proxy(Array)
數(shù)據(jù)訪問建議可通過 data[index]scope.row強(qiáng)烈推薦直接使用 row,避免依賴外部數(shù)組索引

關(guān)鍵變化
Vue 3 中 slot-scope 已廢棄,且雖然 $index 仍可解構(gòu)使用,但只要用不到索引,就不應(yīng)引入。更重要的是,row 就是當(dāng)前行的真實(shí)引用,等價(jià)于 originTableDataCopy[$index],且更安全。

三、遷移后的正確寫法(Vue 3 兼容)

改造原則:

  1. 使用 #default="{ row }" 替代 slot-scope="scope"
  2. row['xxx'] 替代 originTableDataCopy[scope.$index]['xxx']
  3. 添加 typeof ... === 'string' 防御性判斷,避免 .split() 報(bào)錯(cuò)

示例:場景 2 的 Vue 3 安全寫法

<template #default="{ row }">
  <el-input-number
    type="number"
    :controls="false"
    :class="{
      'text-red':
        loanAccounttype === 'issued' &&
        typeof row['EXT_FIELD.' + firstChid.functFldEnNm + (index + 1)] === 'string' &&
        row['EXT_FIELD.' + firstChid.functFldEnNm + (index + 1)].split('?')[1] &&
        row['EXT_FIELD.' + firstChid.functFldEnNm + (index + 1)].split('?')[1] !== 'null'
    }"
    :title="
      loanAccounttype === 'issued' &&
      typeof row['EXT_FIELD.' + firstChid.functFldEnNm + (index + 1)] === 'string' &&
      row['EXT_FIELD.' + firstChid.functFldEnNm + (index + 1)].split('?')[1]
        ? row['EXT_FIELD.' + firstChid.functFldEnNm + (index + 1)].split('?')[1]
        : ''
    "
    v-model="row['EXT_FIELD.' + firstChid.functFldEnNm + (index + 1)]"
    v-if="originTableDataCopy.length > 0 && editable && !secondChid.name?.includes('參考值')"
  />
  <el-input-number
    v-else-if="!secondChid.name?.includes('參考值')"
    type="number"
    :controls="false"
    v-model="row['EXT_FIELD.' + firstChid.functFldEnNm + (index + 1)]"
  />
  <span class="text-red" v-else>
    {{ 
      row['REF_VALUE_0'] + 
      (secondChid.twolvlClsf?.includes('輕度') ? '1' : 
       secondChid.twolvlClsf?.includes('中度') ? '2' : '3')
    }}
  </span>
</template>

關(guān)鍵改進(jìn):

  • 移除 scope.$index,使用 row 直接訪問;
  • 添加 typeof ... === 'string' 防止 .split() 在非字符串上調(diào)用;
  • 保留業(yè)務(wù)邏輯不變,提升健壯性。

四、總結(jié)與最佳實(shí)踐

問題類型Vue 2 寫法Vue 3 推薦寫法原因
作用域插槽slot-scope="scope"#default="{ row }"語法標(biāo)準(zhǔn)化,更簡潔
行數(shù)據(jù)訪問originTableDataCopy[scope.$index]row更安全,避免索引錯(cuò)位
類型安全無防御typeof val === 'string'防止 .split() 在 number/null 上調(diào)用
布爾表達(dá)式cond ? true : false直接用 cond冗余,JS 表達(dá)式本身即布爾值

最佳實(shí)踐建議:

  1. 永遠(yuǎn)優(yōu)先使用 row 而非 data[index]:它更可靠,不受數(shù)組變更影響;
  2. .split(), .replace() 等字符串方法做類型檢查;
  3. 避免 JSON.parse(JSON.stringify()) 深拷貝,改用 structuredClone{...} + map
  4. 按需解構(gòu)插槽參數(shù):不用 $index 就不要寫它。

以上就是從Vue2升級Vue3過程中遇到作用域插槽語法變更問題的解決方法的詳細(xì)內(nèi)容,更多關(guān)于Vue2升級Vue3作用域插槽語法變更的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 完美解決iview 的select下拉框選項(xiàng)錯(cuò)位的問題

    完美解決iview 的select下拉框選項(xiàng)錯(cuò)位的問題

    下面小編就為大家分享一篇完美解決iview 的select下拉框選項(xiàng)錯(cuò)位的問題,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-03-03
  • Vue遞歸實(shí)現(xiàn)樹形菜單方法實(shí)例

    Vue遞歸實(shí)現(xiàn)樹形菜單方法實(shí)例

    學(xué)習(xí)vue有一段時(shí)間了,最近使用vue做了一套后臺管理系統(tǒng),其中使用最多就是遞歸組件,下面這篇文章主要給大家介紹了關(guān)于Vue利用遞歸實(shí)現(xiàn)樹形菜單的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2018-11-11
  • vue 實(shí)現(xiàn)移動(dòng)端鍵盤搜索事件監(jiān)聽

    vue 實(shí)現(xiàn)移動(dòng)端鍵盤搜索事件監(jiān)聽

    今天小編就為大家分享一篇vue 實(shí)現(xiàn)移動(dòng)端鍵盤搜索事件監(jiān)聽,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-11-11
  • Vue3使用路由VueRouter4的簡單示例

    Vue3使用路由VueRouter4的簡單示例

    在vue.js項(xiàng)目中使用vue-router,可以使用路由進(jìn)行界面或路徑跳轉(zhuǎn),下面這篇文章主要給大家介紹了關(guān)于Vue3使用路由VueRouter4的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2021-07-07
  • iview實(shí)現(xiàn)動(dòng)態(tài)表單和自定義驗(yàn)證時(shí)間段重疊

    iview實(shí)現(xiàn)動(dòng)態(tài)表單和自定義驗(yàn)證時(shí)間段重疊

    這篇文章主要介紹了iview實(shí)現(xiàn)動(dòng)態(tài)表單和自定義驗(yàn)證時(shí)間段重疊,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-01-01
  • vue實(shí)現(xiàn)拖拽的簡單案例 不超出可視區(qū)域

    vue實(shí)現(xiàn)拖拽的簡單案例 不超出可視區(qū)域

    這篇文章主要為大家詳細(xì)介紹了vue實(shí)現(xiàn)拖拽的簡單案例,不超出可視區(qū)域,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-07-07
  • Vue3框架使用報(bào)錯(cuò)以及解決方案

    Vue3框架使用報(bào)錯(cuò)以及解決方案

    這篇文章主要介紹了Vue3框架使用報(bào)錯(cuò)以及解決方案,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • 詳解Vue方法與事件

    詳解Vue方法與事件

    本篇文章主要介紹了詳解Vue方法與事件。小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-03-03
  • Vue3?源碼解讀之?Teleport?組件使用示例

    Vue3?源碼解讀之?Teleport?組件使用示例

    這篇文章主要為大家介紹了Vue3?源碼解讀之?Teleport?組件使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • Vue3導(dǎo)出pdf文件詳細(xì)方案

    Vue3導(dǎo)出pdf文件詳細(xì)方案

    這篇文章主要給大家介紹了關(guān)于Vue3導(dǎo)出pdf文件的相關(guān)資料,最近項(xiàng)目有個(gè)需求,將系統(tǒng)統(tǒng)計(jì)的數(shù)據(jù)生成分析報(bào)告,然后可以導(dǎo)出成PDF,這里給大家總結(jié)下,需要的朋友可以參考下
    2023-08-08

最新評論

万盛区| 田林县| 岑巩县| 平和县| 建宁县| 兴国县| 伊春市| 英吉沙县| 霞浦县| 攀枝花市| 大庆市| 邵武市| 东明县| 咸阳市| 阿瓦提县| 乌苏市| 新竹市| 长岛县| 翁牛特旗| 斗六市| 永州市| 余江县| 巧家县| 辰溪县| 嘉峪关市| 忻州市| 抚顺县| 循化| 高尔夫| 韩城市| 中方县| 枝江市| 邹城市| 宜昌市| 海原县| 洛隆县| 武陟县| 天镇县| 都昌县| 张掖市| 原阳县|