成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專(zhuān)欄INFORMATION COLUMN

vue 開(kāi)發(fā)中遇到的問(wèn)題匯總(踩坑指南)

wean / 1904人閱讀

摘要:組件中使用定時(shí)器及銷(xiāo)毀問(wèn)題如果我們?cè)陧?yè)面中使用了一個(gè)定時(shí)器,當(dāng)從頁(yè)面跳轉(zhuǎn)到頁(yè)面時(shí),如果不手動(dòng)清除這個(gè)定時(shí)器,那么它仍舊會(huì)執(zhí)行,這不是我們所期望的。

公司年初開(kāi)始從jquery轉(zhuǎn)型到vue開(kāi)發(fā),思想上從jquery的操作DOM到vue的操作數(shù)據(jù),剛開(kāi)始還不太習(xí)慣,但用了一段時(shí)間發(fā)現(xiàn)確實(shí)比較方便。在剛開(kāi)始用vue的時(shí)候,也踩了一些坑,現(xiàn)在分享出來(lái),供剛?cè)腴T(mén)上手開(kāi)發(fā)vue的朋友參考,都是一些剛接觸vue開(kāi)發(fā)遇到的比較常見(jiàn)的問(wèn)題,vue老手可越過(guò)。

1. props單向綁定

vue中的props是單向綁定的,父組件的屬性變化時(shí)會(huì)傳遞給子組件,子組件內(nèi)部不應(yīng)改變props的值,否則控制臺(tái)會(huì)給出警告。
但如果props的類(lèi)型為數(shù)組或者對(duì)象時(shí),在子組件內(nèi)部改變props的值控制臺(tái)不會(huì)警告。因?yàn)閿?shù)組或?qū)ο笫堑刂芬茫瑅ue不會(huì)檢測(cè)到props發(fā)生改變。所以有的情況需要在子組件內(nèi)部改變父組件的值,可以將屬性定義為數(shù)組或者對(duì)象類(lèi)型傳入。
但官方不建議在子組件內(nèi)改變父組件的值,因?yàn)檫@違反了vue中props單向綁定的思想。

2. 給對(duì)象賦值

由1可以引申出,地址引用類(lèi)型的數(shù)據(jù),例如對(duì)象obj ={a:1},如果想要修改obj中的a屬性,通過(guò)obj.a = 2這樣賦值,頁(yè)面不會(huì)更新,需使用vue.set方法更改才會(huì)起作用, Vue.set(this,obj,a,2);
同樣,如果要給obj增加一個(gè)新屬性,如果該屬性未在data中聲明,頁(yè)面也不會(huì)刷新。也就是vue文檔中聲明的“Vue 不能檢測(cè)到對(duì)象屬性的添加或刪除”,同樣需要使用vue.set方法進(jìn)行賦值才好使。

3. 深拷貝數(shù)組或?qū)ο?/b>

對(duì)象或數(shù)組的簡(jiǎn)單賦值,修改新值也會(huì)改變?cè)?。這時(shí)我們需要獲取原值的深拷貝對(duì)象。
對(duì)于對(duì)象,可以通過(guò)newObj = JSON.parse(JSON.stringfy(obj))實(shí)現(xiàn)。
對(duì)于數(shù)組,可以通過(guò) newArr = […arr]或者newArr = arr.slice(0)來(lái)實(shí)現(xiàn)。

4. 給組件增加獨(dú)有樣式

vue中每一個(gè)組件都可以自定各自的css樣式,如果希望組件內(nèi)的樣式只對(duì)當(dāng)前組件起作用,可以在style標(biāo)簽中增加scoped即可。
該寫(xiě)法會(huì)讓vue在渲染組件的時(shí)候給每個(gè)元素都增加一個(gè)data-v-/版本號(hào)/的屬性,可以保證只針對(duì)有同樣data-v-data-v-/版本號(hào)/的元素應(yīng)用該樣式。

5. v-for循環(huán)key屬性

vue中的v-for循環(huán)最好加上key屬性,否則在高版本(2.2.0+)的vue中控制臺(tái)會(huì)報(bào)錯(cuò)。
key屬性需要唯一,理想的 key 值是每項(xiàng)都有唯一 id,全局不需唯一,但在一個(gè)循環(huán)中需要唯一。

6. 引用圖片

圖片引用問(wèn)題。直接把本地圖片地址放在src里沒(méi)問(wèn)題。但如果把地址提取出來(lái)寫(xiě)在data里或者通過(guò)method動(dòng)態(tài)給src賦值則引用不到。
因?yàn)榉旁趖emplate模板里會(huì)被webpack打包所以可以,而放在data或者動(dòng)態(tài)賦值,圖片路徑只是一個(gè)字符串webpack不會(huì)處理所以引用不到。
解決辦法:通過(guò)import或者required引入。import src from ‘../../img.png’或者data:{img:require(‘../../img.png’)}

7. 父組件傳值

在子組件使用父組件傳入的值時(shí),最好復(fù)制出一份props的值,通過(guò)data或者computed進(jìn)行賦值。
data賦值與computed賦值的區(qū)別:
data賦值:data:{return {aaa: this.aaa}如果是在data中進(jìn)行賦值,當(dāng)父組件的aaa值發(fā)生改變時(shí),不會(huì)在重新賦給子組件中的aaa
computed賦值:如果想讓子組件跟著父組件修改,需要將賦值操作寫(xiě)在computed中。computed:{aaa(){return this.aaa}

8. 對(duì)象數(shù)組深度監(jiān)聽(tīng)

后端傳過(guò)來(lái)的數(shù)組是一個(gè)數(shù)組對(duì)象,頁(yè)面中綁定對(duì)象中某一具體的屬性,當(dāng)該值變化時(shí)調(diào)用某個(gè)函數(shù),自然想到就是watch方法。但如何watch數(shù)組對(duì)象中某一個(gè)具體的屬性,顯然不可能一個(gè)個(gè)屬性寫(xiě)watch。
解決辦法:
1.watch整個(gè)對(duì)象,設(shè)置deeptrue,當(dāng)該對(duì)象發(fā)生改變時(shí),調(diào)用處理函數(shù)。
2.將頁(yè)面中綁定的屬性寫(xiě)在computed函數(shù)中,watch這個(gè)computed中的函數(shù),當(dāng)對(duì)象值改變時(shí)會(huì)進(jìn)入computed函數(shù)中,進(jìn)而進(jìn)入watch函數(shù)中,再調(diào)用處理函數(shù)。

9. 動(dòng)態(tài)增加class

給元素動(dòng)態(tài)增加class時(shí),可以在模板中通過(guò):class={‘hasClass’: ifHasClass}來(lái)實(shí)現(xiàn),當(dāng)ifHasClasstrue時(shí),該元素會(huì)自動(dòng)加上hasClass的樣式。
動(dòng)態(tài)綁定的class可以與正常寫(xiě)的一起使用,但如果在一個(gè)元素中使用了兩個(gè)class則會(huì)報(bào)錯(cuò)。

10. 組件中使用定時(shí)器及銷(xiāo)毀問(wèn)題

如果我們?cè)陧?yè)面A中使用了一個(gè)定時(shí)器,當(dāng)從頁(yè)面A跳轉(zhuǎn)到頁(yè)面B時(shí),如果不手動(dòng)清除這個(gè)定時(shí)器,那么它仍舊會(huì)執(zhí)行,這不是我們所期望的。
通常能想到的常規(guī)解決辦法就是,在data屬性中定義一個(gè)timer,在代碼中啟動(dòng)定時(shí)器,然后在組件銷(xiāo)毀的時(shí)候清除定時(shí)器。具體代碼如下:

    data(){
        return{
            timer:null
        }
    },
    methods:{
        onStartTimer(){
            this.timer = setInterval( () => {
                // 執(zhí)行一些操作
            }, 1000)
        }
    },
    beforeDestroy() {
        clearInterval(this.timer);        
        this.timer = null;
    }

但是這里有兩個(gè)潛在的問(wèn)題:

它需要在這個(gè)組件實(shí)例中保存這個(gè)timer,如果可以的話(huà)最好只有生命周期鉤子可以訪(fǎng)問(wèn)到它。這并不算嚴(yán)重的問(wèn)題,但是它可以被視為雜物。

我們的建立代碼獨(dú)立于我們的清理代碼,這使得我們比較難于程序化地清理我們建立的所有東西。

Vue官方文檔給出的解決方案是,在定義timer的時(shí)候使用$once指令監(jiān)聽(tīng)beforeDestroy這個(gè)鉤子函數(shù)。具體代碼為:

    methods:{
        onStartTimer(){
            const timer = setInterval( () => {
                // 執(zhí)行一些操作
            }, 1000)
            this.$once("hook:beforeDestroy", () => {            
                clearInterval(timer);                                    
            })
        }
    },

這樣就解決了上面所列的兩個(gè)問(wèn)題。類(lèi)似的這種在離開(kāi)頁(yè)面時(shí)需要銷(xiāo)毀的組件都可以采用此方法。

11. 本地開(kāi)發(fā)跨域問(wèn)題

在本地開(kāi)發(fā)請(qǐng)求后端服務(wù)器接口的時(shí)候,都不可避免的會(huì)遇到跨域的問(wèn)題。解決方法可以通過(guò)加一個(gè)node中間層或者nginx做反向代理。但是如果是用vue-cli搭建的項(xiàng)目,vue-cliconfig中自帶了一個(gè)proxyTable屬性,可以配置這個(gè)屬性解決跨域的問(wèn)題。

// config/index.js
module.exports = {
  // ...
  dev: {
    proxyTable: {
      "/api": { // 遇到/api的接口都會(huì)走此代理,因此在調(diào)用接口時(shí),需要在url中增加/api標(biāo)識(shí)
        target: "http://jsonplaceholder.typicode.com", // 真實(shí)的地址
        changeOrigin: true, // 是否啟用跨域
        pathRewrite: {
          "^/api": "" // 將接口中的/api替換成""
        }
      }
    }
  }
}

以上代碼會(huì)將 /api/posts/1請(qǐng)求代理到 http://jsonplaceholder.typicode.com/posts/1。

如果不想在每一個(gè)接口中都手動(dòng)增加/api標(biāo)識(shí),可以更改axios的默認(rèn)配置axios.defaults.baseURL = "/api",這樣,axios會(huì)自動(dòng)幫我們?cè)?b>url上加上/api的前綴。

需要特別注意的是,更改完配置后需要重啟server才會(huì)生效。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/84802.html

相關(guān)文章

  • Nuxt.js踩坑指南(常見(jiàn)問(wèn)題匯總

    摘要:本文會(huì)不定期更新在中遇到的問(wèn)題進(jìn)行匯總。轉(zhuǎn)發(fā)請(qǐng)注明出處,尊重作者,謝謝注意版本為,適合低版本指南,不通用以上。強(qiáng)烈推薦作者文檔版踩坑指南,點(diǎn)擊跳轉(zhuǎn) 本文會(huì)不定期更新在nuxt.js中遇到的問(wèn)題進(jìn)行匯總。轉(zhuǎn)發(fā)請(qǐng)注明出處,尊重作者,謝謝! 注意:版本為1.0+,適合低版本nuxt指南,不通用2.0+以上。 強(qiáng)烈推薦作者文檔版踩坑指南,點(diǎn)擊跳轉(zhuǎn)

    maochunguang 評(píng)論0 收藏0
  • Nuxt.js踩坑指南(常見(jiàn)問(wèn)題匯總

    摘要:本文會(huì)不定期更新在中遇到的問(wèn)題進(jìn)行匯總。轉(zhuǎn)發(fā)請(qǐng)注明出處,尊重作者,謝謝注意版本為,適合低版本指南,不通用以上。強(qiáng)烈推薦作者文檔版踩坑指南,點(diǎn)擊跳轉(zhuǎn) 本文會(huì)不定期更新在nuxt.js中遇到的問(wèn)題進(jìn)行匯總。轉(zhuǎn)發(fā)請(qǐng)注明出處,尊重作者,謝謝! 注意:版本為1.0+,適合低版本nuxt指南,不通用2.0+以上。 強(qiáng)烈推薦作者文檔版踩坑指南,點(diǎn)擊跳轉(zhuǎn)

    ideaa 評(píng)論0 收藏0
  • 踩坑--- 基于釘釘Weex微應(yīng)用開(kāi)發(fā)起手式(其實(shí)寫(xiě)完發(fā)現(xiàn)變成Weex相關(guān)資料匯總了)

    摘要:?jiǎn)栴},你可以在中文討論板塊提交問(wèn)題,地址。文字展現(xiàn)必須使用標(biāo)簽關(guān)于端的點(diǎn)透事件需要在上層視圖上加上,如果上層視圖有事件,多加一個(gè)中間層,把加在空事件視圖上關(guān)于事件注意僅支持和,暫不支持。事件會(huì)在頁(yè)面就要關(guān)閉時(shí)被觸發(fā)。 好吧,我知道你來(lái)看這個(gè)文章,一定是遇到坑了,所以,把這幾個(gè)放在最開(kāi)始吧 現(xiàn)在,如果你的團(tuán)隊(duì)的技術(shù)棧是react,請(qǐng)嘗試這個(gè)吧,跟react很像,如果你的團(tuán)隊(duì)一直使用rea...

    zhouzhou 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<