diff --git "a/data/2.Vue\344\270\255\351\230\266/2.Vue-router/1.vue-router\346\230\257\344\273\200\344\271\210\357\274\237/exercises.json" "b/data/2.Vue\344\270\255\351\230\266/2.Vue-router/1.vue-router\346\230\257\344\273\200\344\271\210\357\274\237/exercises.json" index 3f658aca441589555a3dc541a66fcca84c5ece47..b4c3f7bd74b59cd2d499b30ffbce407a3ad7179b 100644 --- "a/data/2.Vue\344\270\255\351\230\266/2.Vue-router/1.vue-router\346\230\257\344\273\200\344\271\210\357\274\237/exercises.json" +++ "b/data/2.Vue\344\270\255\351\230\266/2.Vue-router/1.vue-router\346\230\257\344\273\200\344\271\210\357\274\237/exercises.json" @@ -1,6 +1,6 @@ { "type": "code_options", - "author": null, + "author": "zhaoss", "source": "exercises.md", "notebook_enable": false, "exercise_id": "ae1fe8c628e74e8790d3a216d7d78fe0" diff --git "a/data/2.Vue\344\270\255\351\230\266/2.Vue-router/2.\350\267\257\347\224\261\345\256\211\350\243\205/exercises.json" "b/data/2.Vue\344\270\255\351\230\266/2.Vue-router/2.\350\267\257\347\224\261\345\256\211\350\243\205/exercises.json" index be02a65d87c04406ac6af10a7557d443f694d0dc..cfe582461462e37b7245ea5e51583ed617905ceb 100644 --- "a/data/2.Vue\344\270\255\351\230\266/2.Vue-router/2.\350\267\257\347\224\261\345\256\211\350\243\205/exercises.json" +++ "b/data/2.Vue\344\270\255\351\230\266/2.Vue-router/2.\350\267\257\347\224\261\345\256\211\350\243\205/exercises.json" @@ -1,6 +1,6 @@ { "type": "code_options", - "author": null, + "author": "zhaoss", "source": "exercises.md", "notebook_enable": false, "exercise_id": "3abb616d5005498e8487d4a007263a2e" diff --git "a/data/2.Vue\344\270\255\351\230\266/2.Vue-router/3.\347\274\226\347\250\213\345\274\217\347\232\204\345\257\274\350\210\252/config.json" "b/data/2.Vue\344\270\255\351\230\266/2.Vue-router/3.\347\274\226\347\250\213\345\274\217\347\232\204\345\257\274\350\210\252/config.json" index 92e9ec9d6e64805485971dcbdef196c7ca30c944..8e347539ff6ec8c22ef6fd1c3a8f7abe1f9fa676 100644 --- "a/data/2.Vue\344\270\255\351\230\266/2.Vue-router/3.\347\274\226\347\250\213\345\274\217\347\232\204\345\257\274\350\210\252/config.json" +++ "b/data/2.Vue\344\270\255\351\230\266/2.Vue-router/3.\347\274\226\347\250\213\345\274\217\347\232\204\345\257\274\350\210\252/config.json" @@ -1,10 +1,14 @@ { "node_id": "vue-35a33dafa3c74a3584269e6317cd7e09", - "keywords": [], + "keywords": [ + "编程å¼çš„导航" + ], "children": [], "export": [ "exercises.json" ], - "keywords_must": [], + "keywords_must": [ + "Vue" + ], "keywords_forbid": [] } \ No newline at end of file diff --git "a/data/2.Vue\344\270\255\351\230\266/2.Vue-router/3.\347\274\226\347\250\213\345\274\217\347\232\204\345\257\274\350\210\252/exercises.json" "b/data/2.Vue\344\270\255\351\230\266/2.Vue-router/3.\347\274\226\347\250\213\345\274\217\347\232\204\345\257\274\350\210\252/exercises.json" new file mode 100644 index 0000000000000000000000000000000000000000..655e5e7dd3c8bb349390ed3c43a78b5bb72c17f5 --- /dev/null +++ "b/data/2.Vue\344\270\255\351\230\266/2.Vue-router/3.\347\274\226\347\250\213\345\274\217\347\232\204\345\257\274\350\210\252/exercises.json" @@ -0,0 +1,7 @@ +{ + "type": "code_options", + "author": null, + "source": "exercises.md", + "notebook_enable": false, + "exercise_id": "0b9df39086d141fc992abfcfa2ace8fc" +} \ No newline at end of file diff --git "a/data/2.Vue\344\270\255\351\230\266/2.Vue-router/3.\347\274\226\347\250\213\345\274\217\347\232\204\345\257\274\350\210\252/exercises.md" "b/data/2.Vue\344\270\255\351\230\266/2.Vue-router/3.\347\274\226\347\250\213\345\274\217\347\232\204\345\257\274\350\210\252/exercises.md" new file mode 100644 index 0000000000000000000000000000000000000000..c2bc7618eea92870460a2581ec3becc7ede9eb90 --- /dev/null +++ "b/data/2.Vue\344\270\255\351\230\266/2.Vue-router/3.\347\274\226\347\250\213\345\274\217\347\232\204\345\257\274\350\210\252/exercises.md" @@ -0,0 +1,123 @@ +# 编程å¼çš„导航 + + <div style="color: pink;">å°å¸¸è¯†ï¼š</div> +<br> + +**编程å¼å¯¼èˆª** + +除了使用 `<router-link>` 创建 a æ ‡ç¾æ¥å®šä¹‰å¯¼èˆªé“¾æŽ¥ï¼Œæˆ‘们还å¯ä»¥å€ŸåŠ© router 的实例方法,通过编写代ç æ¥å®žçŽ°ã€‚ + +**导航到ä¸åŒçš„ä½ç½®** + +注æ„:在 Vue 实例ä¸ï¼Œä½ å¯ä»¥é€šè¿‡ `$router` è®¿é—®è·¯ç”±å®žä¾‹ã€‚å› æ¤ä½ å¯ä»¥è°ƒç”¨ `this.$router.push`。 + +想è¦å¯¼èˆªåˆ°ä¸åŒçš„ URL,å¯ä»¥ä½¿ç”¨ `router.push` æ–¹æ³•ã€‚è¿™ä¸ªæ–¹æ³•ä¼šå‘ history æ ˆæ·»åŠ ä¸€ä¸ªæ–°çš„è®°å½•ï¼Œæ‰€ä»¥ï¼Œå½“ç”¨æˆ·ç‚¹å‡»æµè§ˆå™¨åŽé€€æŒ‰é’®æ—¶ï¼Œä¼šå›žåˆ°ä¹‹å‰çš„ URL。 + +å½“ä½ ç‚¹å‡» `<router-link>` 时,内部会调用这个方法,所以点击 `<router-link :to="...">` 相当于调用 `router.push(...)` : +|å£°æ˜Žå¼ | ç¼–ç¨‹å¼ | +|--|--| +| `<router-link :to="...">` | `router.push(...)` | + + + +该方法的å‚æ•°å¯ä»¥æ˜¯ä¸€ä¸ªå—符串路径,或者一个æ述地å€çš„对象。例如: + +```javascript +// å—符串路径 +router.push('/users/eduardo') + +// 带有路径的对象 +router.push({ path: '/users/eduardo' }) + +// 命åçš„è·¯ç”±ï¼Œå¹¶åŠ ä¸Šå‚数,让路由建立 url +router.push({ name: 'user', params: { username: 'eduardo' } }) + +// 带查询å‚数,结果是 /register?plan=private +router.push({ path: '/register', query: { plan: 'private' } }) + +// 带 hash,结果是 /about#team +router.push({ path: '/about', hash: '#team' }) +``` + +注æ„:如果æ供了 path,params 会被忽略,上述例åä¸çš„ query 并ä¸å±žäºŽè¿™ç§æƒ…况。å–而代之的是下é¢ä¾‹åçš„åšæ³•ï¼Œä½ 需è¦æ供路由的 name 或手写完整的带有å‚æ•°çš„ path : + +```javascript +const username = 'eduardo' +// 我们å¯ä»¥æ‰‹åŠ¨å»ºç«‹ url,但我们必须自己处ç†ç¼–ç +router.push(`/user/${username}`) // -> /user/eduardo +// åŒæ · +router.push({ path: `/user/${username}` }) // -> /user/eduardo +// 如果å¯èƒ½çš„è¯ï¼Œä½¿ç”¨ `name` å’Œ `params` 从自动 URL ç¼–ç ä¸èŽ·ç›Š +router.push({ name: 'user', params: { username } }) // -> /user/eduardo +// `params` ä¸èƒ½ä¸Ž `path` 一起使用 +router.push({ path: '/user', params: { username } }) // -> /user +``` + +由于属性 `to` 与 `router.push` 接å—的对象ç§ç±»ç›¸åŒï¼Œæ‰€ä»¥ä¸¤è€…的规则完全相åŒã€‚ + +`router.push` 和所有其他导航方法都会返回一个 Promise,让我们å¯ä»¥ç‰åˆ°å¯¼èˆªå®ŒæˆåŽæ‰çŸ¥é“是æˆåŠŸè¿˜æ˜¯å¤±è´¥ã€‚我们将在 Navigation Handling ä¸è¯¦ç»†ä»‹ç»ã€‚ + +**替æ¢å½“å‰ä½ç½®** +它的作用类似于 router.push,唯一ä¸åŒçš„是,它在导航时ä¸ä¼šå‘ history æ·»åŠ æ–°è®°å½•ï¼Œæ£å¦‚它的åå—æ‰€æš—ç¤ºçš„é‚£æ ·â€”â€”å®ƒå–代了当å‰çš„æ¡ç›®ã€‚ +| å£°æ˜Žå¼ | ç¼–ç¨‹å¼ | +|--|--| +| <router-link :to="..." replace> | router.replace(...) | + +也å¯ä»¥ç›´æŽ¥åœ¨ä¼ 递给 `router.push` çš„ `routeLocation` ä¸å¢žåŠ 一个属性 `replace: true :` + +```javascript +router.push({ path: '/home', replace: true }) +// 相当于 +router.replace({ path: '/home' }) +``` + +**横跨历å²** +该方法采用一个整数作为å‚数,表示在历å²å †æ ˆä¸å‰è¿›æˆ–åŽé€€å¤šå°‘æ¥ï¼Œç±»ä¼¼äºŽ window.history.go(n)。 + +例å + +```javascript +// å‘å‰ç§»åŠ¨ä¸€æ¡è®°å½•ï¼Œä¸Ž router.forward() ç›¸åŒ +router.go(1) + +// 返回一æ¡è®°å½•ï¼Œä¸Žrouter.back() ç›¸åŒ +router.go(-1) + +// å‰è¿› 3 æ¡è®°å½• +router.go(3) + +// 如果没有那么多记录,é™é»˜å¤±è´¥ +router.go(-100) +router.go(100) +``` + +**篡改历å²** +ä½ å¯èƒ½å·²ç»æ³¨æ„到,`router.pushã€router.replace` å’Œ `router.go` 是 `window.history.pushStateã€window.history.replaceState` å’Œ `window.history.go` 的翻版,它们确实模仿了 `window.history çš„ API`。 + +å› æ¤ï¼Œå¦‚æžœä½ å·²ç»ç†Ÿæ‚‰ Browser History APIs,在使用 Vue Router 时,æ“作历å²è®°å½•å°±ä¼šè§‰å¾—很熟悉。 + +值得一æçš„æ˜¯ï¼Œæ— è®ºåœ¨åˆ›å»ºè·¯ç”±å™¨å®žä¾‹æ—¶ä¼ é€’ä»€ä¹ˆæ ·çš„`history` é…置,`Vue Router` 的导航方法`(pushã€replaceã€go)`都能始终如一地工作。 + +<br> + + <div style="color: pink;">å°æµ‹è¯•ï¼š</div > + +观察下列编程å¼å¯¼èˆªï¼Œæè¿°ä¸æ£ç¡®çš„是?<br/><br/> + +## ç”案 + +router.push({ path: '/user', params: { username:'eduardo' } }) 导航的结果是/user/eduardo + +## 选项 + +### A + +带 hash的导航router.push({ path: '/about', hash: '#team' }),结果是 /about#team + +### B + +带查询å‚数的导航router.push({ path: '/register', query: { plan: 'private' } }) + +### C + +to 与 router.push 接å—的对象ç§ç±»ç›¸åŒï¼Œæ‰€ä»¥ä¸¤è€…的规则完全相åŒã€‚ diff --git "a/data/2.Vue\344\270\255\351\230\266/7.\350\207\252\345\256\232\344\271\211\346\214\207\344\273\244/1.\346\263\250\345\206\214\350\207\252\345\256\232\344\271\211\346\214\207\344\273\244/config.json" "b/data/2.Vue\344\270\255\351\230\266/7.\350\207\252\345\256\232\344\271\211\346\214\207\344\273\244/1.\346\263\250\345\206\214\350\207\252\345\256\232\344\271\211\346\214\207\344\273\244/config.json" index a5998b4c4e7fe4d32cffa60421f5cd25bad4f0be..871d92d0c4f8bf835589ab7c291bf6e54237ff82 100644 --- "a/data/2.Vue\344\270\255\351\230\266/7.\350\207\252\345\256\232\344\271\211\346\214\207\344\273\244/1.\346\263\250\345\206\214\350\207\252\345\256\232\344\271\211\346\214\207\344\273\244/config.json" +++ "b/data/2.Vue\344\270\255\351\230\266/7.\350\207\252\345\256\232\344\271\211\346\214\207\344\273\244/1.\346\263\250\345\206\214\350\207\252\345\256\232\344\271\211\346\214\207\344\273\244/config.json" @@ -3,6 +3,7 @@ "keywords": [], "children": [], "export": [ + "exercises.json" ], "keywords_must": [], "keywords_forbid": [] diff --git "a/data/3.Vue\351\253\230\351\230\266/8.Vue\346\272\220\347\240\201\350\247\243\346\236\220/2.Object.defineProperty()/config.json" "b/data/3.Vue\351\253\230\351\230\266/8.Vue\346\272\220\347\240\201\350\247\243\346\236\220/2.Object.defineProperty()/config.json" index 43b103dfce67b5cd8d0897fdd6df09e192983d7f..e828b0fc4b5fdc95f18843d1de93ecf9a0068255 100644 --- "a/data/3.Vue\351\253\230\351\230\266/8.Vue\346\272\220\347\240\201\350\247\243\346\236\220/2.Object.defineProperty()/config.json" +++ "b/data/3.Vue\351\253\230\351\230\266/8.Vue\346\272\220\347\240\201\350\247\243\346\236\220/2.Object.defineProperty()/config.json" @@ -3,7 +3,7 @@ "keywords": [], "children": [], "export": [ - + "exercises.json" ], "keywords_must": [], "keywords_forbid": [] diff --git a/data/tree.json b/data/tree.json index d97ffd1c786abe9da597d1ce14ddd16ba1c886a8..0844c96dd1ea5cf535ce1311dfb1e8f89bafbe19 100644 --- a/data/tree.json +++ b/data/tree.json @@ -457,9 +457,13 @@ { "编程å¼çš„导航": { "node_id": "vue-35a33dafa3c74a3584269e6317cd7e09", - "keywords": [], + "keywords": [ + "编程å¼çš„导航" + ], "children": [], - "keywords_must": [], + "keywords_must": [ + "Vue" + ], "keywords_forbid": [] } },