router ่ทฏ็ฑ โ
hash ่ทฏ็ฑ โ
ไธ็งๅธธ่ง็ๅ็ซฏ่ทฏ็ฑๆๆฏ๏ผไธป่ฆ็จไบๅ้กตๅบ็จ๏ผSPA๏ผใ ๅฎไฝฟ็จ URL ็ hash ้จๅ๏ผๅณ # ๅ้ข็้จๅ๏ผๆฅ่กจ็คบไธๅ็้กต้ขๆ่งๅพใ
ๅ็ โ
Hash ้จๅ URL ไธญ
#
ไนๅ็้จๅ็งฐไธบ hashใ ๆนๅ hash ไธไผๅฏผ่ด้กต้ข้ๆฐๅ ่ฝฝ๏ผไฝไผ่งฆๅhashchange
ไบไปถใHash ่ทฏ็ฑ ๅฉ็จ hash ็ๅๅๆฅๅฎ็ฐไธๅ่งๅพ็ๅๆข๏ผไป่ๅฎ็ฐๅ้กตๅบ็จ็ๅฏผ่ชใ
js
www.test.com/#/a
// ็ดๆฅ่ตๅผไนๅฏไปฅ
location.hash = "/b";
www.test.com/#/b
// ็ๅฌ hash ๅๅ hashchange
window.addEventListener(
"hashchange",
function (e) {
console.log(e, "The hash has changed!");
},
false
);
history ่ทฏ็ฑ โ
ๅฉ็จ HTML5 History API
ๅฎ็ฐ็ๅ็ซฏ่ทฏ็ฑๆๆฏ๏ผไธป่ฆ็จไบๅ้กตๅบ็จ๏ผSPA๏ผใ
ไธ Hash ่ทฏ็ฑไธๅ๏ผHistory ่ทฏ็ฑไธไฝฟ็จ URL ็ hash ้จๅ๏ผ่ๆฏๅฉ็จ pushState
ๅ replaceState
ๆนๆณ็ดๆฅๆไฝๆต่งๅจ็ๅๅฒ่ฎฐๅฝ๏ผๅ
่ฎธๆไปฌๅๅปบๆด็พ่งๅ่ฏญไนๅ็ URLใ
js
history.pushState(state, title, url); // ่ทณ่ฝฌ
history.replaceState(state, title, url); // ๆฟๆขๅฝๅ็่ฎฐๅฝ
history.back();
history.forward();
history.go(n);
// ็ๅฌ
window.addEventListener("popstate", function (e) {
console.log(e);
});
history ๅทๆฐ้กต้ข 404 โ
url ่ฏทๆฑๆชๅน้ ๅฐๅฏนๅบ็้ๆ่ตๆบๆ api ๆฅๅฃ
js
// ่งฃๅณ๏ผๆๅก็ซฏ ่ทๅไธๅฐ่ตๆบ ๅฐ url ้ๅฎๅๅฐๆ น็ฎๅฝ
const express = require("express");
const path = require("path");
const app = express();
const port = 3000;
// ่ฎพ็ฝฎ้ๆๆไปถ็ฎๅฝ
app.use(express.static(path.join(__dirname, "public")));
// ๆ่ทๆๆๆชๅน้
็่ทฏ็ฑ๏ผ่ฟๅ index.html
app.get("*", (req, res) => {
res.sendFile(path.join(__dirname, "public", "index.html"));
});
app.listen(port, () => {
console.log(`Server is running at http://localhost:${port}`);
});