·ÓÉÊÇÒ»¸öµ¥Ò³Ó¦ÓõĺËÐÄ£¬´ó²¿·ÖÇ°¶Ë¿ò¼Ü¶¼ÊµÏÖÁËÒ»¸ö¸´ÔӵķÓɿ⣬°üÀ¨¶¯Ì¬Â·ÓÉ£¬Â·Óɹ³×Ó£¬×é¼þÉúÃüÖÜÆÚÉõÖÁ·þÎñÆ÷¶ËäÖȾµÈ¸´ÔӵŦÄÜ¡£µ«ÊǶÔÓÚÇ°¶Ë¿ª·¢Õ߶øÑÔ£¬Â·ÓÉ×é¼þµÄºËÐÄÊÇURL·¾¶µ½º¯ÊýµÄÓ³É䣬Á˽âÁËÕâ¸ö¸ÅÄ±ã¿ÉÒÔÇ××ÔʵÏÖÒ»¸ö¼òµ¥µÄ·Óɹ¦ÄÜ¡£
1£®Â·ÓɵÄÔÀí
·ÓÉ£¨Route£©ÔÚÇ°¶Ë¿ÉÒÔÀí½âΪURL·¾¶µ½º¯ÊýµÄÓ³Éä¡£µ±·ÃÎʵ½Ò»¸öÌض¨µÄ·¾¶Ê±Ö´ÐÐÌض¨µÄº¯Êý¡£ÁíÒ»¸ö¸ÅÄîRouter£¬ÓÃÓÚ¹ÜÀí¸÷ÖÖRoute£¬Ò²¾ÍÊÇÆ¥Åä·¾¶µ½º¯ÊýµÄ¹ý³Ì¡£
2£®ÊµÏÖ·ÓÉ
Web¶ËʵÏÖ·ÓÉÓÐÁ½ÖÖ¼¼Êõģʽ¡£
Hash·ÓɵÄ·¾¶ÖлáÓÐÒ»¸ö¡°#¡±±êÖ¾£¬¼´³£ËµµÄêµã£¬Ç°¶ËÏòºó¶Ë·þÎñÆ÷·¢ËÍÇëÇóʱ²¢²»»á½âÎöHash²¿·Ö¡£Â·ÓÉʵÏÖͨ¹ý¼àÌýÒ³Ãæwindow¶ÔÏóµÄhashChangeÊÂÇ飬µ÷ÓöÔÓ¦µÄº¯Êý£¬ÓŵãÊǼæÈÝÐÔºÃÇÒÍêÈ«ÍÑÀëºó¶Ë£¬È±µãÊÇÒòΪ´øÁËHash±êÖ¾µ¼Ö·Óɲ»Ö±¹Û¡£
History APIͨ¹ý¼àÌýHTML 5Ìí¼ÓµÄpopstateʼþ£¬URL¸ñʽ¸ú´«Í³µÄºó¶Ë·ÓÉÒ»Ö£¬ÕâÒ²ÊÇÕâÖÖģʽ×î´óµÄÓŵ㡣ȱµãÊÇÖ»ÓÐÐÂÐÍä¯ÀÀÆ÷Ö§³Ö¸ÃÌØÐÔ£¬ÇÒÐèÒªºó¶Ë·ÓÉÅäºÏ£¬ÒòΪµ±Óû§·ÃÎÊÒ»¸öHistory·ÓÉʵÏֵķ¾¶Ê±£¬Ò³ÃæÈÔ»áÏñºó¶ËÇëÇó£¬Èç¹ûºó¶ËûÓÐÉèÖÃÏàÓ¦µÄ·ÓÉʵÏÖÂß¼£¬½«·µ»Ø404´íÎó¡£
¸ù¾ÝÇ°¶Ë·ÓɵĸÅÄʵÏÖÒ»¸ö·ÓÉÐèÒªÈý¸ö²¿·Ö£º´æ´¢Â·¾¶ºÍ¶ÔÓ¦µÄ»Øµ÷·½·¨£¬¼àÌýä¯ÀÀÆ÷µÄÏà¹Øʼþ£¬¸ù¾Ý¼àÌý½á¹ûÖ´Ðз¾¶¶ÔÓ¦»Øµ÷·½·¨¡£¸ù¾ÝÕâЩҪÇó£¬ÔÚ¿ª·¢µÄ·ÓÉÄ£¿éÖУ¬Éè¼ÆÒ»¸ö¶ÔÏóͨ¹ý¡°Key-Value¡±Ä£Ê½´æ·Å·¾¶ºÍ¶ÔÓ¦·½·¨£¬ÔÙͨ¹ýwindow¶ÔÏó¼àÌýpopstateʼþ£¬¸ù¾Ýµ±Ç°µÄ·¾¶´Ó·ÓɶÔÏóÖÐÑ¡ÔñÖ´ÐжÔÓ¦µÄ·½·¨£¬ÊµÏֵĴúÂëÈçÏ£º
function Router() { this.routes = {}; // ´æ·Å·¾¶ºÍ¶ÔÓ¦·½·¨ this.route = function(path, callback) { // ʵÀý»¯ºóͨ¹ýµ÷ÓÃÀ´Ôö¼ÓеķÓÉ this.routes[path] = callback; // ͨ¹ýkey-value´æ·Åcallback } this.refresh = function() { // ͨ¹ýÒ»¸öº¯Êýµ÷ÓÃ×îÖÕµÄcallback var curUrl = location.hash.slice(1) || ¡®/¡¯; // ÔÚHashģʽÏ»ñȡ·¾¶ // var curUrl = location.pathname; // ÔÚHistory APIģʽÏ»ñȡ·¾¶ this.routes[curUrl](); // µ÷ÓÃ×îÖÕµÄcallback } this.init = function() { // ³õʼ»¯·½·¨ // ¼àÌýloadʼþ¶ÔÓ¦µÚÒ»´ÎÒ³Ãæ¼ÓÔØ window.addEventListener(¡®load¡¯, this.refresh.bind(this), false); // HashģʽϼàÌýhashchangeʼþ window.addEventListener(¡®hashchange¡¯, this.refresh.bind(this), false); // History APIģʽϼàÌýpopstateʼþ // window.addEventListener(¡®popstate¡¯, this.refresh.bind(this), false); } }
¡¡¡¡
ÔÚʵ¼Ê¿ª·¢¹ý³ÌÖУ¬ÐèÒªµ÷ÓÃroute·½·¨Ìí¼Ó·ÓɺͶÔÓ¦·½·¨£¬Ê¹ÓôúÂëÈçÏ£º
var router = new Router(); // ʵÀý»¯Router·½·¨ router.init(); // initÀ´¼àÌý¶ÔÓ¦µÄÈ«¾Öʼþ router.route(¡®/¡¯, function() { ¡ }); // Óùýroute·½·¨Ìí¼ÓеķÓɺͶÔÓ¦·½·¨ router.route(¡®test¡¯, function() {¡});
¡¡¡¡
ÕâÑù¾ÍʵÏÖÁËÒ»¸ö¹¦Äܼòµ¥µÄµ¥Ò³Â·ÓÉ£¬¶ÔÓÚʹÓÃÁËReact»òÕßVue.jsÕâÑùµÄ¸´ÔÓµ¥Ò³Ó¦Óã¬Â·ÓÉ×é¼þ»¹ÊµÏÖÁËһϵÁи´ÔӵŦÄÜ¡£±¾½ÚֻʵÏÖÁËÒ»¸ö¼òµ¥µÄ·ÓÉÄ£¿é£¬ÆäËû¸´ÔӵŦÄÜ¿ÉÒԲο¼React Router»òÕßaxios£¨Vue 2.0ÍƼö·ÓÉ£©µÄÔ´Âë¡£
¸ü¶àÐÅÏ¢¹Ø×¢£º
¡¡