在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/HTML/ vue中,從列表中選擇一條數(shù)據(jù),進行彈窗修改,如何實現(xiàn)最優(yōu)雅?

vue中,從列表中選擇一條數(shù)據(jù),進行彈窗修改,如何實現(xiàn)最優(yōu)雅?

題目描述

列表中的數(shù)據(jù),選中一條,點擊修改,彈窗顯示詳情,可以進行修改,點擊確定往后臺傳數(shù)據(jù),點擊取消關閉彈窗

有個特殊點就是 后臺傳過來的 date字段是 time類型,需要轉成date,el-date-picker才支持

題目來源及自己的思路

效果圖:
圖片描述

我的思路就是

computed一個currentData return list[0],
然后將 currentData傳入彈窗組件,還傳入一個是否顯示彈窗變量visible,
彈窗組件內部
watch visible,如果visible是true就 深拷貝一個currentData,

這樣彈窗內部無論如何修改數(shù)據(jù)都不會影響 父組件的currentData,

然后已一個 時間字段的修改 來當例子 ,我覺得我的代碼寫的很丑 ,不夠優(yōu)雅 ,請各位指點一下 ,謝謝

相關代碼

父組件:

<modify-dialog v-if="checkedBettingObject" :betting-object="checkedBettingObject" :highlight-id.sync="highlightId"
               :visible.sync="modifyDialogVisible"></modify-dialog>
               

子組件:

html:

最早時間:<el-date-picker v-model="dateProp" type="datetime"></el-date-picker>

js:

props: ['visible', 'bettingObject', 'highlightId'],
created() {
  //創(chuàng)建時給子組件的currentData賦值
  this.bettingObjectProp = Object.assign({}, this.bettingObject)
  //給子組件綁定的currentData的時間字段賦值
  this.dateProp = new Date(this.bettingObjectProp.earliestMatchTime)
},
data() {
  return {
    //子組件的currentData
    bettingObjectProp: null,
    //子組件的 時間選擇框綁定的值 
    dateProp: null
  }
},
watch: {
  //監(jiān)控,每次點擊按鈕visible都會為true,都將currentData深拷貝一次
  visible() {
    if (this.visible) {
      this.bettingObjectProp = Object.assign({}, this.bettingObject)
      this.dateProp = new Date(this.bettingObjectProp.earliestMatchTime)
    }
  },
  //時間控件每次變化都改變 子組件currentData的值
  dateProp() {
    this.bettingObjectProp.earliestMatchTime = this.dateProp
  }
},

你期待的結果是什么?實際看到的錯誤信息又是什么?

問題描述

我覺得我現(xiàn)在代碼寫的很麻煩,很啰嗦,不優(yōu)雅,但是又找不到好的解決辦法,請各位賜教,謝謝

回答
編輯回答
離殤
  1. 整個項目用了自己寫的組件還是像 Element 或者 Vuetify 之類的組件庫?如果是組件庫,那么綁定一個數(shù)據(jù)就可以顯示或隱藏彈框,不用 v-if(優(yōu)雅了一點?)
  2. 考慮使用 lodash 之類的庫來進行 pick、clone、deepClone
  3. 深拷貝的時機不需要通過 watch visible 來觸發(fā),點擊“修改”按鈕的時候就可以進行深拷貝
  4. 時間處理可以在保存的時候進行,也不需要通過 watch 來觸發(fā)

總而言之,在點擊“修改”的時候準備數(shù)據(jù),并修改綁定到彈框的數(shù)據(jù)來顯示彈框,點擊保存的時候保存數(shù)據(jù)、隱藏彈框
至于保存數(shù)據(jù)后或取消修改時,準備的數(shù)據(jù)是否要銷毀,個人覺得可以不用銷毀

2017年4月11日 09:21
編輯回答
安淺陌

你說要用computed,但你并沒有在你的代碼中看到。
另外,watch有必要嗎?

你彈出窗要的數(shù)據(jù),點擊事件的時候去修改就行了。

2017年3月28日 04:36
編輯回答
短嘆

嗯?這么復雜的么?時間控件每次變化的值不用記錄,你只需要在用戶點擊“確定”按鈕的時候,獲取這個dateProp即可。整體功能實現(xiàn)其實沒那么麻煩:
1.用戶點擊“修改”,showEditContainer(rowValue) 傳入此行的所有值
2.在showEditContainer方法體內,先將rowValue格式化為你想要的格式(比如你說的時間格式要更改),然后填入對應編輯項。
3.用戶編輯想要更改的項,點擊“確定”按鈕,你獲取所有項的當前值(這里假定所有項用戶都更改了比較簡單),然后封裝成后端想要的格式,發(fā)請求給后端即可。
4.關閉編輯框。

2018年8月18日 06:09
編輯回答
臭榴蓮

我現(xiàn)在做的是在選中一行準備編輯的時候變量傳遞給彈窗組件.

在彈窗組件中mounted的時候我使用的JSON.parse(JSON.stringify(xxx))來進行深拷貝,雖然這樣對于非通常對象,比如Date,File有問題,不過一般來說編輯的數(shù)據(jù)不會包含這樣類型.這樣比起Object.assign,如果數(shù)據(jù)包含數(shù)組或者嵌套對象,不會出現(xiàn)引用問題而誤修改原數(shù)據(jù).

彈窗組件只修改自己深拷貝過的值,提交和關閉都是傳遞給父級的事件,把之后的實際提交數(shù)據(jù)與實際關閉彈窗的動作都交由父級組件來完成.

這樣子組件的功能就比較單純,方便模塊化.

2018年9月5日 12:19