⑴ 什麼是路由路由分為哪兩類
提到路由,大家一般會想到生活中常見的路由器,路由器主要用於連接多個邏輯上分開的網路,邏輯網路代表-個單獨的網路或者一個子網,可以通過路由器功能來完成不同網路之間數據的傳遞。在Vue中也引人了路由的概念,因此,我們先來對程序開發中的路由進行簡單地了解。
程序開發中的路由分為後端路由和前端路由,下面我們分別進行簡要介紹。
1. 後端路由
後端路由通過用戶請求的URL分發到具體的處理程序,瀏覽器每次跳轉到不同的URL都會重新訪問伺服器。伺服器收到請求後,將數據和模板組合,返回HTML頁面,或者直接返回HTML模板,由前端JavaScript程序再去請求數據,使用前端模板和數據進行組合生成最終的HTML頁面。下圖演示了後端路由的工作原理。
2. 前端路由
前端路由就是把不同路由對應不同的內容或頁面的任務交給前端來做。前端路由和後端路由的原理是類似的,但是實現的方式不一樣。對於單頁面應用(Single Page Application, SPA)來說,主要通過URL中的hash(#號)來實現不同頁面之間的切換。hash有一個特點,就是HTTP請求中不會包含hash相關的內容,所以單頁面程序中的頁面跳轉主要用hash來實現。
下圖演示了前端路由的工作原理。
在上圖中,index.html 後面的『#home」是hash方式的路由,由前端路由來處理,將hash值與頁面中的組件對應,當hash值為「#/home」 時,就顯示「首頁」組件。前端路由在訪問一個新頁面的時候僅僅是變換了一下hash值而已,沒有和服務端交互,所以不存在網路延遲,提升了用戶體驗。
⑵ 前端使用@vue/[email protected]打包,路由懶載入vue文件打包缺失,年初2月份的時候還能正常打包
不要 使用3.5以上的版本 很容易出現問題
你應該 使用穩定版
給你個 建議 更換版本
⑶ Web前端主要包括哪些技術小白求解答
Web前端技術主要包括HTML5、CSS3、Less、Sass、響應式布局、移動端開發、以及Ps設計等,更高級的前端開發人員還需要掌握JavaScript 語言、Mysql、Mongodb資料庫開發、vue.js、webpack、elementui等前端框架技術。蝸牛學院這里也給大家整理了一份web前端學習路線,希望對想要學習web前端的小白有所幫助。
第一階段:專業核心基礎
階段目標:
1. 熟練掌握HTML5、CSS3、Less、Sass、響應書布局、移動端開發。
2. 熟練運用HTML+CSS特性完成頁面布局。
4. 熟練應用CSS3技術,動畫、彈性盒模型設計。
5. 熟練完成移動端頁面的設計。
6. 熟練運用所學知識仿製任意Web網站。
7. 能綜合運用所學知識完成網頁設計實戰。
知識點:
1、Web前端開發環境,HTML常用標簽,表單元素,Table布局,CSS樣式表,DIV+CSS布局。熟練運用HTML和CSS樣式屬性完成頁面的布局和美化,能夠仿製任意網站的前端頁面實現。
2、CSS3選擇器、偽類、過渡、變換、動畫、字體圖標、彈性盒模型、響應式布局、移動端。熟練運用CSS3來開發網頁、熟練開發移動端,整理網頁開發技巧。
3、預編譯css技術:less、sass基礎知識、以及插件的運用、BootStrap源碼分析。能夠熟練使用 less、sass完成項目開發,深入了解BootStrap。
4、使用HTML、CSS、LESS、SASS等技術完成網頁項目實戰。通過項目掌握第一階段html、css的內容、完成PC端頁面設計和移動端頁面設計。
第二階段:Web後台技術
階段目標:
1. 了解JavaScript的發展歷史、掌握Node環境搭建及npm使用。
2. 熟練掌握JavaScript的基本數據類型和變數的概念。
3. 熟練掌握JavaScript中的運算符使用。
4. 深入理解分之結構語句和循環語句。
5. 熟練使用數組來完成各種練習。
6.熟悉es6的語法、熟練掌握JavaScript面向對象編程。
7.DOM和BOM實戰練習和H5新特性和協議的學習。
知識點:
1、軟體開發流程、演算法、變數、數據類型、分之語句、循環語句、數組和函數。熟練運用JavaScript的知識完成各種練習。
2、JavaScript面向對象基礎、異常處理機制、常見對象api,js的兼容性、ES6新特性。熟練掌握JavaScript面向對象的開發以及掌握es6中的重要內容。
3、BOM操作和DOM操作。熟練使用BOM的各種對象、熟練操作DOM的對象。
4、h5相關api、canvas、ajax、數據模擬、touch事件、mockjs。熟練使用所學知識來完成網站項目開發。
第三階段:資料庫和框架實戰
階段目標:
1. 綜合運用Web前端技術進行頁面布局與美化。
2. 綜合運用Web前端開發框架進行Web系統開發。
3. 熟練掌握Mysql、Mongodb資料庫的發開。
4. 熟練掌握vue.js、webpack、elementui等前端框技術。
5. 熟練運用Node.js開發後台應用程序。
6. 對Restful,Ajax,JSON,開發過程有深入的理解,掌握git的基本技能。
知識點:
1、資料庫知識,範式,MySQL配置,命令,建庫建表,數據的增刪改查,mongodb資料庫。深入理解資料庫管理系統通用知識及MySQL資料庫的使用與管理,為Node.js後台開發打下堅實基礎。
2、模塊系統,函數,路由,全局對象,文件系統,請求處理,Web模塊,Express框架,MySQL資料庫處理,RestfulAPI,文件上傳等。熟練運用Node.js運行環境和後台開發框架完成Web系統的後台開發。
3、vue的組件、生命周期、路由、組件、前端工程化、webpack、elementui框架。Vue.js框架的基本使用有清晰的理解,能夠運用Vue.js完成基礎前端開發、熟練運用Vue.js框架的高級功能完成Web前端開發和組件開發,對MVVM模式有深刻理解。
4、需求分析,資料庫設計,後台開發,使用vue、node完成pc和移動端整站開發。於Node.js+Vue.js+Webpack+Mysql+Mongodb+Git,實現整站項目完整功能並上線發布。
第四階段:移動端和微信實戰
階段目標:
1.熟練掌握React.js框架,熟練使用React.js完成開發。
2.掌握移動端開發原理,理解原生開發和混合開發。
3.熟練使用react-native和Flutter框架完成移動端開發。
4.掌握微信小程序以及了解支付寶小程序的開發。
5.完成大型電商項目開發。
知識點:
1、React面向組件編程、表單數據、組件通信、監聽、聲明周期、路由、Rex基本概念。練使用react完成項目開發、掌握Rex中的非同步解決方案Saga。
2、react-native、開發工具、視圖與渲染、api操作、Flutter環境搭建、路由、ListView組件、網路請求、打包。練掌握react-native和Flutter框架,並分別使用react-native和Flutter分別能開發移動端項目。
3、微信小程序基本介紹、開發工具、視圖與渲染、api操作、支付寶小程序的入門和api學習。掌握微信小程序開發了解支付寶小程序。
4、大型購物網站實戰,整個項目前後端分離開發;整個項目分為四部分:PC端網頁、移動端APP、小程序、後台管理。團隊協作開發,使用git進行版本控制。目期間可以擴展Three.js 、TypeScript。
⑷ 前端路由(1):基礎知識
URI: Uniform Resource Identifier 統一資源標識符; 由5部分組成:
URI = scheme:[//authority]path[?query][#fragment]
scheme: 協議 常見的有 http , https , file等
authority: 可以由三部分組成 [userinfo]host:[port]
其中userinfo指用戶信息,可以通過authority中的userinfo進行的登錄(當然現在前端應用並不會這么做)
host指的是主機地址,可以是ipv4或者是用方括弧括起來的ipv6地址,或者是可以通過DNS解析成ip地址的域名,如www..com
port指埠號, 如果不指定則使用默認埠號,http默認埠號80, https默認埠號443
path: 指文件路徑,指定伺服器上文件路徑以訪問特定資源
query: 查詢字元串 又稱search值 get介面傳參會通過此部分進行傳輸
fragment: 片段標識符 又稱hash值, 通常用於標記已獲取資源的子資源,不會被傳遞到伺服器端
關於編碼:
URI是用的是百分號編碼,對於需要編碼的字元,將其表示為2個十六進制的字元,然後在其前面加入轉義字元%
兩個編碼api:
encodeURI 與 encodeURIComponent: encodeURI編碼的范圍比encodeURIComponent要小 ,其中encodeURI是w3c的標准。
window.history對象存在很多屬性, 比較重點關注的有:
readonly length: number;
readonly state: any;
方法:
pushState(state: any, title: string, url?: string | null) : void;
replaceState(state: any, title: string, url?: string | null) : void;
go(delta: number): void 與 back():void; forward():void;
第一個參數需要是可被結構化復制的數據類型, (結構化復制: 可以處理循環引用的JSON),會持久化存儲在瀏覽器內部,在每次頁面生成的時候會被重新提取出來(屬於瀏覽器實現的深拷貝)
第二個參數title傳字元串,用於標記當前方法
第三個參數url,可以傳簡單字元串,也可以傳url對象,需要注意的是因為此方法被同源策略所限制,url必須與當前href同源,否則會報錯。此參數可以不傳,不傳的時候就是單純的操作瀏覽器歷史棧。
方法作用: 生成一個新的歷史棧並將指針指向它,操作並不會刷新瀏覽器,也就是說此方法會改變瀏覽器的歷史棧length,和state對象;
replaceState與pushState參數完全相同,使用方法類似,但其作用是替換當前歷史棧,也就是說歷史棧的指針與長度不會發生變化,其作用僅僅是替換當前的url與state。
pushState與replaceState方法其url傳參方式多種多樣,可以是絕對路徑,也可以是相對路徑,也可以傳遞查詢字元串search值"?xxx"與片段標識符"#xxx",其最大特點是操作瀏覽器url,history對象的state與length屬性,但不會觸發瀏覽器跳轉。
pushState與replaceState方法以相對路徑方式進行操作url的時候,會受到當前html的<base>元素的href的影響,此時base元素的href會替換瀏覽器的url的href作為基準值進行相對路徑跳轉。
瀏覽器的跳轉方法主要圍繞window.location與window.history這兩個對象進行。
1) window.history
window.history.go(delta: number): void;
移動瀏覽器歷史棧指針並且刷新頁面
window.history.back() === window.history.go(-1)
window.history.forward() === window.history.go(1)
2) window.location
window.location.href
get :() =>string;
set : (url: string) => void; // 觸發瀏覽器跳轉 並增加歷史棧 不收同源策略限制
window.location.hash
get: () => string;
set: (hash: string) => void;
與href類似,其區別是用於修改瀏覽器導航欄url的hash值,會產生新的歷史棧,但不會觸發瀏覽器頁面刷新,並且在set hash值與當前url的hash值相同時,不會有任何事發生(等於沒執行)。
window.location.replace
這是一個純方法,其作用是替換當前瀏覽器的棧記錄,設置為傳入新的URL,並且刷新頁面。
replace可以對hash進行操作並且觸發對應的事件,不會受相同hash的規則影響
1) popstate事件
history.pushState與history.replaceState產生的歷史棧記錄中,如果棧指針發生了移動,或者點擊了瀏覽器的前進或者回退按鈕時,會觸發popstate事件,可以通過window.addEventListener去添加事件監聽。
popstate拿到的event對象最關鍵的屬性是event.state,這個event.state是直接從瀏覽器底層存儲器中取出(屬於深拷貝),而非從歷史棧中的state取出,因此直接修改歷史棧state並不會對event.state造成影響(反之亦然)。
前後兩次設置相同的location.hash時不會觸發兩次popstate事件,但是通過location.href設置兩次相同的hash可以,雖然可以觸發兩次popstate事件,但是歷史棧只會增加一層。
2)hashchange事件
hashchange時間監聽的是瀏覽器url的片段標識符的變化,也就是hash值的變化,事件對象event可以拿到關鍵的oldUrl和newUrl,表示hash跳轉前的url和跳轉後的url。
pushState方法即使是只改動了瀏覽器的hash值,也不會觸發hashchange事件。
這兩個事件都可以通過window.dispatchEvent方法去觸發,dispatchEvent方法需要傳入一個事件對象:
window.dispatchEvent(new PopStateEvent());
對於hashchang事件同理:
window.dispatchEvent(new HashChangeEvent());