摘要:前言如今可謂是一匹黑馬數(shù)已居第一位前端開發(fā)對(duì)于的使用已經(jīng)越來越多,它的優(yōu)點(diǎn)就不做介紹了本篇是我對(duì)使用過程中以及對(duì)一些社區(qū)朋友提問我的問題中做的一些總結(jié)幫助大家踩坑。隨后的重新渲染,元素組件及其所有的子節(jié)點(diǎn)將被視為靜態(tài)內(nèi)容并跳過。
前言
vue如今可謂是一匹黑馬,github star數(shù)已居第一位!前端開發(fā)對(duì)于vue的使用已經(jīng)越來越多,它的優(yōu)點(diǎn)就不做介紹了,
本篇是我對(duì)vue使用過程中以及對(duì)一些社區(qū)朋友提問我的問題中做的一些總結(jié),幫助大家踩坑。如果喜歡的話可以點(diǎn)波贊,或者關(guān)注一下,希望本文可以幫到大家!!!
----------我是分割線
本篇介紹的問題大概如下:路由變化頁面數(shù)據(jù)不刷新問題
setTimeout/setInterval(泛指異步回掉函數(shù)的this指向)this指向改變,無法用this訪問VUe實(shí)例
setInterval路由跳轉(zhuǎn)繼續(xù)運(yùn)行并沒有及時(shí)進(jìn)行銷毀
vue 滾動(dòng)行為用法,進(jìn)入路由需要滾動(dòng)到瀏覽器底部 頭部等等
實(shí)現(xiàn)vue路由攔截瀏覽器的需求,進(jìn)行 一系列操作 草稿保存等等
v-once 只渲染元素和組件一次,優(yōu)化更新渲染性能
vue本地代理配置 解決跨域問題,僅限于開發(fā)環(huán)境
本地開發(fā) 沒有任何問題 部署服務(wù)器 就404啊這些問題
1. 路由變化頁面數(shù)據(jù)不刷新問題出現(xiàn)這種情況是因?yàn)橐蕾嚶酚傻膒arams參數(shù)獲取寫在created生命周期里面,因?yàn)橄嗤酚啥紊踔炼啻渭虞d的關(guān)系 沒有達(dá)到監(jiān)聽,退出頁面再進(jìn)入另一個(gè)文章頁面并不會(huì)運(yùn)行created組件生命周期,導(dǎo)致文章數(shù)據(jù)還是第一次進(jìn)入的數(shù)據(jù)
解決方法:watch監(jiān)聽路由是否變化
watch: { // 方法1 "$route" (to, from) { //監(jiān)聽路由是否變化 if(this.$route.params.articleId){// 判斷條件1 判斷傳遞值的變化 //獲取文章數(shù)據(jù) } } //方法2 "$route"(to, from) { if (to.path == "/page") { /// 判斷條件2 監(jiān)聽路由名 監(jiān)聽你從什么路由跳轉(zhuǎn)過來的 this.message = this.$route.query.msg } } }2. 異步回調(diào)函數(shù)中使用this無法指向vue實(shí)例對(duì)象
//setTimeout/setInterval ajax Promise等等 data(){ return{ ... } }, methods (){ setTimeout(function () { //其它幾種情況相同 console.log(this);//此時(shí)this指向并不是vue實(shí)例 導(dǎo)致操作的一些ma"f },1000); }
解決方案 變量賦值和箭頭函數(shù)
var和let的區(qū)別
//使用變量訪問this實(shí)例 let self=this; setTimeout(function () { console.log(self);//使用self變量訪問this實(shí)例 },1000); //箭頭函數(shù)訪問this實(shí)例 因?yàn)榧^函數(shù)本身沒有綁定this setTimeout(() => { console.log(this); }, 500);3. setInterval路由跳轉(zhuǎn)繼續(xù)運(yùn)行并沒有及時(shí)進(jìn)行銷毀
比如一些彈幕,走馬燈文字,這類需要定時(shí)調(diào)用的,路由跳轉(zhuǎn)之后,因?yàn)榻M件已經(jīng)銷毀了,但是setInterval還沒有銷毀,還在繼續(xù)后臺(tái)調(diào)用,控制臺(tái)會(huì)不斷報(bào)錯(cuò),如果運(yùn)算量大的話,無法及時(shí)清除,會(huì)導(dǎo)致嚴(yán)重的頁面卡頓。
解決辦法:在組件生命周期beforeDestroy停止setInterval
//組件銷毀前執(zhí)行的鉤子函數(shù),跟其他生命周期鉤子函數(shù)的用法相同。 beforeDestroy(){ //我通常是把setInterval()定時(shí)器賦值給this實(shí)例,然后就可以像下面這么停止。 clearInterval(this.intervalId); },4. vue 滾動(dòng)行為用法,進(jìn)入路由需要滾動(dòng)到瀏覽器底部 頭部等等
使用前端路由,當(dāng)切換到新路由時(shí),想要頁面滾到頂部,或者是保持原先的滾動(dòng)位置,就像重新加載頁面那樣。 vue-router 能做到,而且更好,它讓你可以自定義路由切換時(shí)頁面如何滾動(dòng)。
注意: 這個(gè)功能只在支持 history.pushState 的瀏覽器中可用。
路由設(shè)置如下: 詳情猛戳
const router = new VueRouter({ mode: "history", scrollBehavior (to, from, savedPosition) { if (savedPosition) { //如果savedPosition存在,滾動(dòng)條會(huì)自動(dòng)跳到記錄的值的地方 return savedPosition } else { return { x: 0, y: 0 }//savedPosition也是一個(gè)記錄x軸和y軸位置的對(duì)象 } }, routes: [...] })5. 實(shí)現(xiàn)vue路由攔截瀏覽器的需求,進(jìn)行一系列操作 草稿保存等等
場(chǎng)景:
為了防止用戶失誤點(diǎn)錯(cuò)關(guān)閉按鈕等等,導(dǎo)致沒有保存已輸入的信息(關(guān)鍵信息)。
用法:
//在路由組件中:
... beforeRouteLeave (to, from, next) { if(用戶已經(jīng)輸入信息){ //出現(xiàn)彈窗提醒保存草稿,或者自動(dòng)后臺(tái)為其保存 }else{ next(true);//用戶離開 } }
還有beforeEach、beforeRouteUpdate這些生命周期函數(shù) 詳情猛戳
6. v-once 只渲染元素和組件一次,優(yōu)化更新渲染性能v-once這個(gè)指令相信大家用的很少,不過個(gè)人感覺還是挺實(shí)用的!
只渲染元素和組件一次。隨后的重新渲染,元素/組件及其所有的子節(jié)點(diǎn)將被視為靜態(tài)內(nèi)容并跳過。這可以用于優(yōu)化更新性能。
這個(gè)就不舉例子了 直接猛戳這 v-once
這個(gè)本地代理用來解決開發(fā)環(huán)境下的跨域問題,跨域可謂老生常談的問題了,proxy 在vue中配置代理非常簡(jiǎn)單
//比方說你要訪問 http://192.168.1.xxx:8888/backEnd/paper這個(gè)接口 //配置 config.js下面proxyTable對(duì)象 proxyTable: { "/backEnd":{ target:"http://192.168.3.200:8888", //目標(biāo)接口域名有端口可以把端口也寫上 //或者prot本地起服務(wù)端口與服務(wù)端統(tǒng)一 changeOrigin:true, } }, // 發(fā)送request請(qǐng)求 axios.get("/backEnd/page") //按代理配置 匹配到/backEnd就代理到目標(biāo)target地址 .then((res) => { console.log(res) // 數(shù)據(jù)完全拿得到 配置成功 this.newsList = res.data }, (err) => { console.log(err) }) 或者: proxyTable: { "/api":{ target:"http://192.168.3.200:8888", //目標(biāo)接口域名有端口可以把端口也寫上,或者prot本地起服務(wù)端口與服端統(tǒng)一 changeOrigin:true, pathRewrite: { //該屬性重寫接口把`/api`去掉 "^/api": "" } } }, // 發(fā)送request請(qǐng)求 axios.get("/api/backEnd/page") //按代理配置 匹配到/backEnd就代理到目標(biāo)target地址 .then((res) => { console.log(res) // 數(shù)據(jù)完全拿得到 配置成功 this.newsList = res.data }, (err) => { console.log(err) })8. 本地開發(fā) 沒有任何問題 部署服務(wù)器 就404啊這些問題
由于前端路由緣故,單頁面應(yīng)用應(yīng)該放到nginx或者apache、tomcat等web代理服務(wù)器中,千萬不要直接訪問index.html,同時(shí)要根據(jù)自己服務(wù)器的項(xiàng)目路徑更改react或vue的路由地址
注意點(diǎn)
1: vue-router的 history 模式 2: 服務(wù)nginx配置
到最后我想說聲抱歉,之前答應(yīng)你們的node由于個(gè)人原因沒有及時(shí)更新出來,node 方面的文章篇幅一定短不了,因?yàn)橐阉v清楚不是一句倆句話的事,好在我發(fā)現(xiàn)了一篇文章 對(duì)初學(xué)者晉升高級(jí)初學(xué)者有很大幫助,請(qǐng)點(diǎn)擊猛戳這里,希望你認(rèn)真的看完這篇文章(書把,篇幅不短),它會(huì)對(duì)你有很大的幫助,我一定在年前給你補(bǔ)一遍開發(fā)完整應(yīng)用的node 方向的文章!
結(jié)語這篇文章只是開始,它的待續(xù)還會(huì)很長很長,希望你我堅(jiān)持下去!也希望我能幫助到更多的人,當(dāng)然也會(huì)讓我真正沉淀一下,為了以后為了將來 一起努力如果大家有什么問題,或者需要補(bǔ)充的 歡迎留言!我會(huì)進(jìn)行補(bǔ)全的 ! 詳細(xì)版本我稍后也會(huì)上傳到gitHub!
如果覺得文章對(duì)大家有幫助,希望大家能點(diǎn)贊一下或者關(guān)注一下,得到肯定的我會(huì)更加努力!~~
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/92833.html
摘要:在這一節(jié),我們碰到的片段是一組立即運(yùn)行的匿名函數(shù)。匿名函數(shù)的調(diào)用要調(diào)用一個(gè)函數(shù),我們必須要有方法定位它,引用它。那么很顯然,沒有任何實(shí)現(xiàn)的匿名函數(shù)不可能應(yīng)用了閉包特性。 代碼如下: (function(){ //這里忽略jQuery所有實(shí)現(xiàn) })(); (function(){ //這里忽略jQuery所有實(shí)現(xiàn) })(); 半年前初次接觸jQuery的時(shí)候,我也像其他人一樣很興...
摘要:折線圖小技巧折線圖功能豐富且官方文檔詳細(xì)易懂,上手比較容易,這篇文章將分享一些項(xiàng)目中踩過的坑,示例主要以多條曲線為主,對(duì)大家完成一些曲線和的展示及交互有所幫助基本使用文檔寫得非常詳細(xì)清晰,官方示例也很豐富,中還有很多功能更強(qiáng)大的示例篇的是很 echarts 折線圖小技巧 echarts 折線圖功能豐富且官方文檔詳細(xì)易懂,上手比較容易,這篇文章將分享一些項(xiàng)目中踩過的坑,示例主要以多條曲線...
摘要:折線圖小技巧折線圖功能豐富且官方文檔詳細(xì)易懂,上手比較容易,這篇文章將分享一些項(xiàng)目中踩過的坑,示例主要以多條曲線為主,對(duì)大家完成一些曲線和的展示及交互有所幫助基本使用文檔寫得非常詳細(xì)清晰,官方示例也很豐富,中還有很多功能更強(qiáng)大的示例篇的是很 echarts 折線圖小技巧 echarts 折線圖功能豐富且官方文檔詳細(xì)易懂,上手比較容易,這篇文章將分享一些項(xiàng)目中踩過的坑,示例主要以多條曲線...
摘要:我的書簽我的書簽謹(jǐn)慎導(dǎo)入,小心覆蓋工具類版本管理快速切換源配置教程指南可視化工具前端工具集前端助手網(wǎng)絡(luò)封包截取工具格式化工具標(biāo)注工具模擬請(qǐng)求類深入淺出布局你所不知道的動(dòng)畫技巧與細(xì)節(jié)常用代碼黑魔法小技巧,讓你少寫不必要的,代碼更優(yōu)雅一勞永 我的書簽 我的書簽(謹(jǐn)慎導(dǎo)入,小心覆蓋) 工具類 nvm: node版本管理 nrm: 快速切換npm源 shell: zsh+on-my-zsh配...
閱讀 2732·2021-11-23 09:51
閱讀 1020·2021-09-24 10:37
閱讀 3723·2021-09-02 15:15
閱讀 2024·2019-08-30 13:03
閱讀 1959·2019-08-29 15:41
閱讀 2687·2019-08-29 14:12
閱讀 1489·2019-08-29 11:19
閱讀 3358·2019-08-26 13:39