è¢ç£èå¸ç课ï¼Vueå ¨å®¶æ¡¶ï¼ä¸ï¼
- ä¸ãå页é¢åºç¨spa
å°±æ¯åªæä¸å¼ web页é¢çåºç¨ï¼å°±æ¯å è½½å个htmlã
- ä¼ç¹ï¼é¡µé¢åæ¢å¿«
- 缺ç¹ï¼é¦å±æ¶é´ç¨æ ¢ï¼SEOï¼æç´¢å¼æä¼åï¼å·® âæç´¢å¼æè¿è¯»ä¸æå页é¢ï¼æç´¢å¼ææ é¿è¯»çæ¯å¤é¡µé¢â
- äºãè·¯ç± vue-router
- åºæ¬ä½¿ç¨ï¼
<router-link to="/home">主页</router-link> <router-view></router-view>
ç¹å»â主页âï¼è·³è½¬å°/home页 - è·¯ç±å
·ä½çåæ³ï¼ï¼å®æ¹ï¼
HTMLæä»¶
<script src="https://unpkg.com/vue/dist/vue.js"></script>
<script src="https://unpkg.com/vue-router/dist/vue-router.js"></script>
<div id="app">
<h1>Hello App!</h1>
<p>
<!-- ä½¿ç¨ router-link ç»ä»¶æ¥å¯¼èª. -->
<!-- éè¿ä¼ å
¥ `to` 屿§æå®é¾æ¥. -->
<!-- <router-link> é»è®¤ä¼è¢«æ¸²ææä¸ä¸ª `<a>` æ ç¾ -->
<router-link to="/foo">Go to Foo</router-link>
<router-link to="/bar">Go to Bar</router-link>
</p>
<!-- è·¯ç±åºå£ -->
<!-- è·¯ç±å¹é
å°çç»ä»¶å°æ¸²æå¨è¿é -->
<router-view></router-view>
</div>
JavaScriptæä»¶
// 0. å¦æä½¿ç¨æ¨¡ååæºå¶ç¼ç¨ï¼å¯¼å
¥VueåVueRouterï¼è¦è°ç¨ Vue.use(VueRouter)
// 1. å®ä¹ (è·¯ç±) ç»ä»¶ã
// å¯ä»¥ä»å
¶ä»æä»¶ import è¿æ¥
const Foo = { template: '<div>foo</div>' }
const Bar = { template: '<div>bar</div>' }
// 2. å®ä¹è·¯ç±
// æ¯ä¸ªè·¯ç±åºè¯¥æ å°ä¸ä¸ªç»ä»¶ã å
¶ä¸"component" å¯ä»¥æ¯
// éè¿ Vue.extend() å建çç»ä»¶æé å¨ï¼
// æè
ï¼åªæ¯ä¸ä¸ªç»ä»¶é
置对象ã
// æä»¬æç¹å讨论åµå¥è·¯ç±ã
const routes = [
{ path: '/foo', component: Foo },
{ path: '/bar', component: Bar }
]
// 3. å建 router å®ä¾ï¼ç¶åä¼ `routes` é
ç½®
// ä½ è¿å¯ä»¥ä¼ å«çé
ç½®åæ°, ä¸è¿å
è¿ä¹ç®åçå§ã
const router = new VueRouter({
routes // (缩å) ç¸å½äº routes: routes
})
// 4. å建åæè½½æ ¹å®ä¾ã
// è®°å¾è¦éè¿ router é
ç½®åæ°æ³¨å
¥è·¯ç±ï¼
// ä»è让æ´ä¸ªåºç¨é½æè·¯ç±åè½
const app = new Vue({
router
}).$mount('#app')
// ç°å¨ï¼åºç¨å·²ç»å¯å¨äºï¼
ç»ä¹ ï¼
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta http-equiv="X-UA-Compatible" content="ie=edge" />
<title>Document</title>
</head>
<body>
<!-- ç¹å»ææºï¼å°±ä¼æ¾ç¤ºææºçç»ä»¶å¨<router-view>é -->
<div id="app">
<router-link to="/mobile">ææº</router-link>
<router-link to="/auto">汽车</router-link>
<router-link to="/mobile">ææº</router-link>
<router-view></router-view>
</div>
<!-- !!!!!!!!!注æå¦ï¼ä¸å®è¦å
å¼å
¥vue.jsåå¼å
¥vue router -->
<script src="./vue.js"></script>
<script src="./vue-router.js"></script>
<script>
// ç»ä»¶1 mobileææºçç»ä»¶ï¼ç¨m代æ¿
var m = {
// è¿éå¿
é¡»ç¨åå¼å·ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼å¼èµ·æ³¨æï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼åå¼å·ï¼ï¼ï¼ï¼ï¼ï¼ï¼
template: `<div class="box">è¿æ¯ææºç页é¢ï¼</div>`
};
// ç»ä»¶2 auto汽车çç»ä»¶ï¼ç¨a代æ¿
var a = {
// è¿éå¿
é¡»ç¨åå¼å·ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼å¼èµ·æ³¨æï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼åå¼å·ï¼ï¼ï¼ï¼ï¼ï¼ï¼
template: `<div class="box">è¿æ¯æ±½è½¦ç页é¢ï¼</div>`
};
// è¿éé¢è¦åçæ¯è·¯çéåï¼routesï¼å°±æ¯åªä¸ªè·¯å¯¹åºåªä¸ªç»ä»¶
var router = new VueRouter({
routes: [
// "/mobile"è¿ä¸ªè·¯å¾å¯¹åºçcomponentæ¯m
{ path: "/mobile", component: m },
{ path: "/auto", component: a }
]
});
var vm = new Vue({
el: "#app",
// å¨è¿éåç¥routerè·¯ç±å¨æ¯ä¸é¢varåºæ¥çrouteråé
// å½å±æ§å屿§å鿝åä¸ä¸ªååçæ¶åï¼åªéè¦åä¸ä¸ªå³å¯ï¼å°±åä¸é¢ä¸¤è¡ç代ç ï¼é½æ¯å¥½ç¨ç
// router,
router: router
});
</script>
</body>
</html>
- ä¸ãè·¯ç±åµå¥
- ç»ä¹ ï¼
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta http-equiv="X-UA-Compatible" content="ie=edge" />
<title>åè·¯ç±</title>
</head>
<body>
<!-- ç°å¨åçæ¯spaï¼ææçè·³è½¬é½æ¯å¨ä¸ä¸ªçé¢éè¿è¡çï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ -->
<!-- ç¹å»ææºï¼å°±ä¼æ¾ç¤ºææºçç»ä»¶å¨<router-view>é -->
<div id="app">
<router-link to="/mobile">ææº</router-link>
<router-link to="/auto">汽车</router-link>
<router-link to="/mobile">ææº</router-link>
<router-view></router-view>
</div>
<!-- !!!!!!!!!注æå¦ï¼ä¸å®è¦å
å¼å
¥vue.jsåå¼å
¥vue router -->
<script src="./vue.js"></script>
<script src="./vue-router.js"></script>
<script>
// ç»ä»¶1 mobileææºçç»ä»¶ï¼ç¨m代æ¿
var m = {
// è¿éå¿
é¡»ç¨åå¼å·ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼å¼èµ·æ³¨æï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼åå¼å·ï¼ï¼ï¼ï¼ï¼ï¼ï¼
template: `<div class="box">è¿æ¯ææºç页é¢ï¼
<router-link to="/mobile/huawei">å为</router-link>
<router-link to="/mobile/xiaomi">å°ç±³</router-link>
<router-view></router-view>
</div>`
// åç»ä»¶éä¹è¦æï¼router-viewï¼ï¼ï¼ï¼ï¼
};
// ç»ä»¶2 auto汽车çç»ä»¶ï¼ç¨a代æ¿
var a = {
// è¿éå¿
é¡»ç¨åå¼å·ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼å¼èµ·æ³¨æï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼åå¼å·ï¼ï¼ï¼ï¼ï¼ï¼ï¼
template: `<div class="box">è¿æ¯æ±½è½¦ç页é¢ï¼</div>`
};
// ç»ä»¶3 ææºçåç»ä»¶å为ï¼ç¨a代æ¿
var huawei = {
// è¿éå¿
é¡»ç¨åå¼å·ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼å¼èµ·æ³¨æï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼åå¼å·ï¼ï¼ï¼ï¼ï¼ï¼ï¼
template: `<div class="box">è¿æ¯å为ç页é¢ï¼</div>`
};
// ç»ä»¶4 ææºçåç»ä»¶å°ç±³ï¼ç¨a代æ¿
var xiaomi = {
// è¿éå¿
é¡»ç¨åå¼å·ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼å¼èµ·æ³¨æï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼åå¼å·ï¼ï¼ï¼ï¼ï¼ï¼ï¼
template: `<div class="box">è¿æ¯å°ç±³ç页é¢</div>`
};
// è¿éé¢è¦åçæ¯è·¯çéåï¼routesï¼å°±æ¯åªä¸ªè·¯å¯¹åºåªä¸ªç»ä»¶
var router = new VueRouter({
routes: [
// "/mobile"è¿ä¸ªè·¯å¾å¯¹åºçcomponentæ¯m
{
path: "/mobile",
component: m,
// åè·¯ç±
children: [{
path: "/huawei",
comment: huawei
},
{
path: "/xiaomi",
comment: xiaomi
}
]
},
{
path: "/auto",
component: a
}
]
});
var vm = new Vue({
el: "#app",
// å¨è¿éåç¥routerè·¯ç±å¨æ¯ä¸é¢varåºæ¥çrouteråé
// å½å±æ§å屿§å鿝åä¸ä¸ªååçæ¶åï¼åªéè¦åä¸ä¸ªå³å¯ï¼å°±åä¸é¢ä¸¤è¡ç代ç ï¼é½æ¯å¥½ç¨ç
// router,
router: router
});
</script>
</body>
</html>
3. è·¯ç±åæ°å®ä¹å®ç°urlçä¼ å¼ï¼
$route.params.cname éè¦å¨è·¯ç±éå®ä¹
$route.query.type æ éå®ä¹ï¼ä½¿ç¨æ¶å¨urlä¸ç¨
ç»ä¹ ï¼
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta http-equiv="X-UA-Compatible" content="ie=edge" />
<title>两ç§ä¼ 弿¹æ³ 第ä¸ç§ç¨ï¼ï¼ç¬¬äºç§ç´æ¥ç¨$route.params.name...</title>
</head>
<body>
<!-- ç°å¨åçæ¯spaï¼ææçè·³è½¬é½æ¯å¨ä¸ä¸ªçé¢éè¿è¡çï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ -->
<!-- ç¹å»ææºï¼å°±ä¼æ¾ç¤ºææºçç»ä»¶å¨<router-view>é -->
<div id="app">
<router-link to="/mobile">ææº</router-link>
<router-link to="/auto">汽车</router-link>
<router-link to="/auto/åä½">å½äº§ç
éæ±½è½¦</router-link>
<!-- ä¸é¢çè¿ä¸è¡ä»£ç ç¨$router.params.nameè¿ç§æ¹å¼ä¼ å¼ï¼æä»¬éè¦å¨ä¸é¢ç/auto åé¢å ä¸ä¸é¢çåæ°å¦ï¼è¿ç§æ¹å¼åªè½ä¼ æ¯è¾ç®åçåæ°å¦ -->
<router-link to="{name:'qiche',params:{ name='äºè±ä¹å
' }}">å½äº§ç¥è½¦</router-link>
<!-- 第ä¸ç§ä¼ åçæ¹æ³ä¸ï¼paramså¯ä»¥ä¼ 夿çå¼ -->
<router-view></router-view>
</div>
<!-- !!!!!!!!!注æå¦ï¼ä¸å®è¦å
å¼å
¥vue.jsåå¼å
¥vue router -->
<script src="./vue.js"></script>
<script src="./vue-router.js"></script>
<script>
// ç»ä»¶1 mobileææºçç»ä»¶ï¼ç¨m代æ¿
var m = {
// è¿éå¿
é¡»ç¨åå¼å·ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼å¼èµ·æ³¨æï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼åå¼å·ï¼ï¼ï¼ï¼ï¼ï¼ï¼
template: `<div class="box">è¿æ¯ææºç页é¢ï¼
<router-link to="/mobile/huawei">å为</router-link>
<router-link to="/mobile/xiaomi">å°ç±³</router-link>
<router-link to="/mobile/huawei?name=p30">ééå å</router-link>
<router-link to="/mobile/huawei?name=mate20">人æ°å å</router-link>
<router-view></router-view>
</div>`
// åç»ä»¶éä¹è¦æï¼router-viewï¼ï¼ï¼ï¼ï¼
};
// ç»ä»¶2 auto汽车çç»ä»¶ï¼ç¨a代æ¿
var a = {
// è¿éå¿
é¡»ç¨åå¼å·ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼å¼èµ·æ³¨æï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼åå¼å·ï¼ï¼ï¼ï¼ï¼ï¼ï¼
// 注æçè¿éç¨å°çæ¯ç¬¬äºç§éè¦å®ä¹ç$router.params.nameè¿ç§æ¹å¼ï¼é£ä¹å¼å¦ä½ä¼ è¿æ¥å¢ï¼
template: `<div class="box">
<h3>è¿æ¯æ±½è½¦ç页é¢ï¼</h3>
{{$router.params.name}}
</div>`
};
// ç»ä»¶3 ææºçåç»ä»¶å为ï¼ç¨a代æ¿
var huawei = {
// è¿éå¿
é¡»ç¨åå¼å·ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼å¼èµ·æ³¨æï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼åå¼å·ï¼ï¼ï¼ï¼ï¼ï¼ï¼
// å¨è¿éå¯ä»¥è·å¾ä¸é¢router-linkä¸çåæ°
template: `<div class="sm">
<h3>è¿æ¯å为ç页é¢!</h3>
{{$router.query.name}}
</div>`
};
// ç»ä»¶4 ææºçåç»ä»¶å°ç±³ï¼ç¨a代æ¿
var xiaomi = {
// è¿éå¿
é¡»ç¨åå¼å·ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼å¼èµ·æ³¨æï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼ï¼åå¼å·ï¼ï¼ï¼ï¼ï¼ï¼ï¼
template: `<div class="sm">è¿æ¯å°ç±³ç页é¢</div>`
};
// è¿éé¢è¦åçæ¯è·¯çéåï¼routesï¼å°±æ¯åªä¸ªè·¯å¯¹åºåªä¸ªç»ä»¶
var router = new VueRouter({
routes: [
// "/mobile"è¿ä¸ªè·¯å¾å¯¹åºçcomponentæ¯m
{
path: "/mobile",
component: m,
// åè·¯ç±
children: [{
path: "/huawei",
comment: huawei
},
{
// 第ä¸ç§ä¼ 弿¹æ³å¦
path: "/xiaomi",
comment: xiaomi,
name: "qiche"
}
]
},
{
// 第äºç§ä¼ åçæ¹å¼ï¼è¿éé¢å°±å¿
é¡»è¦å¨pathä¸å®ä¹ä¸ä¸ªåæ°äºï¼
path: "/auto/:name",
component: a
}
]
});
var vm = new Vue({
el: "#app",
// å¨è¿éåç¥routerè·¯ç±å¨æ¯ä¸é¢varåºæ¥çrouteråé
// å½å±æ§å屿§å鿝åä¸ä¸ªååçæ¶åï¼åªéè¦åä¸ä¸ªå³å¯ï¼å°±åä¸é¢ä¸¤è¡ç代ç ï¼é½æ¯å¥½ç¨ç
// router,
router: router
});
</script>
</body>
</html>