vue前端測試開發(fā)watch監(jiān)聽data的數(shù)據(jù)變化
watch監(jiān)聽data的數(shù)據(jù)變化
上一篇里提到了用elementUI的select實現(xiàn)了個遠程搜索的功能,最終效果是這樣的。
但是繼續(xù)開發(fā)的時候,又遇到了一個新的問題,跟上面的功能有關(guān)。
先看下遠程搜索的操作,與data里的數(shù)據(jù)關(guān)系。
- 當輸入“張”進行搜索,看到的下拉列表里展示的結(jié)果都是存放在data的options: []。
- 當我選擇了一個,比如“張三”,因為select框做了綁定v-model="user_value",所以此時user_value有了對應(yīng)人員的值,存放的是id。
- 最后的ad_real_name是后加的,因為我有一個接口要改動,本來只要傳id的,現(xiàn)在還要多傳入個收貨人的姓名。
新問題
之前只傳id,做起來就很簡單,因為綁定了user_value了,直接用就好了。
但是現(xiàn)在我需要把ad_real_name也傳過去,問題是我如何在user_value有值(id)的時候,把id對應(yīng)人的姓名賦給ad_real_named。
解決
我先試著同一個事件里面能不能調(diào)用2個方法,結(jié)果不太行。
再后來我就想到監(jiān)聽了,當點擊了人員后,user_value此時被賦值,如果我監(jiān)聽這個字段,當有值的時候,去把人名賦給ad_real_name即可。
接下來就是代碼實現(xiàn)了:
1. 先把姓名的值,也加到options里
這個options是個列表,里面的元素是一個個對象{},對象里就是key-value。之前只放了{value:"", label: ""},現(xiàn)在我要把ad_real_name也放進去,變成{value:"", label: "", ad_real_name: ""}。
2. 在監(jiān)聽里增加for循環(huán)和判斷
當選擇了人員之后,此時for循環(huán)這個options,遍歷每一個對象。然后判斷當對象里的value=選定的user_value,就把這個對象中的"ad_real_name"對應(yīng)值賦給data里的字段ad_real_name。
為了快速驗證效果,在console里加了log打印。最終的代碼是:
watch: { user_value:function() { for (let i=0; i<this.options.length; i++) { if (this.options[i]['value'] === this.user_value) { this.ad_real_name = this.options[i]['ad_real_name']; console.log("打印this.ad_real_name", this.ad_real_name) } } } },
- user_value:表示我要監(jiān)聽這個字段。
- function():這里寫監(jiān)聽到變化后,要做的處理。
F12打開控制臺,目標達成。
或許還有別的更快捷的方法,但是畢竟我是前端小白,快速解決問題為首要,如果大佬們有更好的寫法建議,還請不吝賜教。
-----------------2021-05-25------------更-------------
往后開發(fā)的時候發(fā)現(xiàn)還是有些問題,F(xiàn)12看了下,傳遞到接口的值ad_real_name還是null。
但是控制臺輸出這個字段又是有值的。于是我猜想,是不是事件觸發(fā)的太快了,也就是說ad_real_name其實還沒來得及賦上值,就發(fā)送后端請求了。
于是,我處理了下后端發(fā)送請求的方法,加了個延遲500ms。
getReceiveOperatorToken() { setTimeout(() => { this.$axios.post('/api/receiveGoodsQuickly/getReceiveOperatorToken', { 'sm_admin_id': this.user_value, 'receive_wh_id': this.receive_wh_id, 'ad_real_name': this.ad_real_name, 'mchid': 6001 }).then((response) => { if (response.data['code'] === 0) { this.receive_operator_token = response.data['content']; this.$message({ type: 'success', message: '收貨人token獲取成功' }) } else { this.$message({ type: 'warning', message: response.data['errormsg'], }); } }) }, 500); // 用setTimeout() },
成功解決。
以上就是vue測試開發(fā)watch監(jiān)聽data的數(shù)據(jù)變化的詳細內(nèi)容,更多關(guān)于vue測試watch監(jiān)聽data數(shù)據(jù)的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
vue打包上傳服務(wù)器加載提示錯誤Loading chunk {n} failed
這篇文章主要為大家介紹了vue打包上傳服務(wù)器加載提示錯誤Loading chunk {n} failed解決方法,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-08-08VUE3.2項目使用Echarts5.4詳細步驟總結(jié)
Vue3.2是一款非常流行的JavaScript框架,它讓在前端領(lǐng)域開發(fā)變得更加的便捷,下面這篇文章主要給大家介紹了關(guān)于VUE3.2項目使用Echarts5.4的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下2023-06-06使用Vue3+Vant組件實現(xiàn)App搜索歷史記錄功能(示例代碼)
最近接了個項目需要開發(fā)一個app項目,由于是第一次接觸這種app開發(fā),經(jīng)過一番思考,決定使用Vue3+Vant前端組件的模式進行開發(fā),下面把問題分析及實現(xiàn)代碼分享給大家,需要的朋友參考下吧2021-06-06vue3中調(diào)用api接口實現(xiàn)數(shù)據(jù)的渲染以及詳情方式
這篇文章主要介紹了vue3中調(diào)用api接口實現(xiàn)數(shù)據(jù)的渲染以及詳情方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-08-08