vue-router

  1 中文文档地址: https://router.vuejs.org/zh-cn/essentials/nested-routes.html
  2 <script src="https://unpkg.com/vue-router/dist/vue-router.js"></script>
  3 
  4 <p>
  5         <router-link to="/user/1">Go to Foo</router-link>
  6         <router-link to="/bar">Go to Bar</router-link>
  7  </p>
  8 <router-view></router-view>
  9 
 10 const User = {
 11       template: '<div>User {{ $route.params.id }}</div>'
 12 }
 13 const Bar= {
 14       template: '<div>User</div>'
 15 }
 16 
 17 const router = new VueRouter({
 18       routes: [
 19             { path: '/user/:id', component: User },
 20   { path: '/bar', component: Bar }
 21       ]
 22 })
 23 
 24 var vue = new Vue({
 25 router,
 26 el:"#app"
 27 })
 28 
 29 二级路由:
 30 const router = new VueRouter({
 31     routes: [
 32             { 
 33 path: '/user/:id',
 34 component: User,
 35                    children: [
 36                 { 
 37      // 当 /user/:id 匹配成功,地址为空时跳转UserHome页面
 38                         // UserHome 会被渲染在 User 的 <router-view> 39       path: '',
 40       component: UserHome 
 41    },
 42             {
 43                         // 当 /user/:id/profile 匹配成功,
 44                         // UserProfile 会被渲染在 User 的 <router-view> 45                         path: 'profile',
 46                         component: UserProfile
 47                    },
 48                 {
 49                         // 当 /user/:id/posts 匹配成功
 50                         // UserPosts 会被渲染在 User 的 <router-view> 中 --->  需要注意
 51                         path: 'posts',
 52                         component: UserPosts
 53                 }
 54              ]
 55             }
 56       ]
 57 });
 58 要注意,以 / 开头的嵌套路径会被当作根路径。 这让你充分的使用嵌套组件而无须设置嵌套的路径
 59 
 60 编程式导航:
 61 
 62 router.push(location)
 63 1.// 字符串
 64 router.push('home')
 65 2.// 对象
 66 router.push({ path: 'home' })
 67 3.// 命名的路由
 68 router.push({ name: 'user', params: { userId: 123 }})
 69 4.// 带查询参数,变成 /register?plan=private
 70 router.push({ path: 'register', query: { plan: 'private' }})
 71 当你点击 <router-link> 时,这个方法会在内部调用,所以说,点击 <router-link :to="..."> 等同于调用 router.push(...)
 72 
 73 router.replace(location)
 74 跟 router.push 很像,唯一的不同就是,它不会向 history 添加新记录,而是跟它的方法名一样 —— 替换掉当前的 history 记录
 75 声明式:
 76 <router-link :to="..." replace>
 77 编程式:
 78 router.replace(...)
 79 
 80 router.go(n)
 81 这个方法的参数是一个整数,意思是在 history 记录中向前或者后退多少步,类似 window.history.go(n)
 82 1.// 在浏览器记录中前进一步,等同于 history.forward()
 83 router.go(1)
 84 2.// 后退一步记录,等同于 history.back()
 85 router.go(-1)
 86 3.// 前进 3 步记录
 87 router.go(3)
 88 4.// 如果 history 记录不够用,那就默默地失败呗
 89 router.go(-100)
 90 router.go(100)
 91 
 92 命名路由
 93 有时候,通过一个名称来标识一个路由显得更方便一些,特别是在链接一个路由,或者是执行一些跳转的时候。你可以在创建 Router 实例的时候,在 routes 配置中给某个路由设置名称
 94 const router = new VueRouter({
 95       routes: [
 96             {
 97                   path: '/user/:userId',
 98                  name: 'user',
 99                   component: User
100             }
101       ]
102 })
103 要链接到一个命名路由,可以给 router-link 的 to 属性传一个对象
104 <router-link :to="{ name: 'user', params: { userId: 123 }}">User</router-link>
105 这跟代码调用 router.push() 是一回事
106 router.push({ name: 'user', params: { userId: 123 }})
107 这两种方式都会把路由导航到 /user/123 路径
108 例子:
109 import Vue from 'vue'
110 import VueRouter from 'vue-router'
111 
112 Vue.use(VueRouter)
113 
114 const Home = { template: '<div>This is Home</div>' }
115 const Foo = { template: '<div>This is Foo</div>' }
116 const Bar = { template: '<div>This is Bar {{ $route.params.id }}</div>' }
117 
118 const router = new VueRouter({
119       mode: 'history',
120       base: __dirname,
121       routes: [
122             { path: '/', name: 'home', component: Home },
123             { path: '/foo', name: 'foo', component: Foo },
124             { path: '/bar/:id', name: 'bar', component: Bar }
125       ]
126 })
127 
128 new Vue({
129       router,
130       template: `
131             <div id="app">
132                   <h1>Named Routes</h1>
133                   <p>Current route name: {{ $route.name }}</p>
134                   <ul>
135                     <li><router-link :to="{ name: 'home' }">home</router-link></li>
136                     <li><router-link :to="{ name: 'foo' }">foo</router-link></li>
137                     <li><router-link :to="{ name: 'bar', params: { id: 123 }}">bar</router-link></li>
138                   </ul>
139                   <router-view class="view"></router-view>
140             </div> `
141 }).$mount('#app')
142 
143 命名视图:
144 有时候想同时(同级)展示多个视图,而不是嵌套展示,例如创建一个布局,有 sidebar(侧导航) 和 main(主内容) 两个视图,这个时候命名视图就派上用场了。你可以在界面中拥有多个单独命名的视图,而不是只有一个单独的出口。如果 router-view 没有设置名字,那么默认为 default
145 html:
146 <script src="https://unpkg.com/vue/dist/vue.js"></script>
147 <script src="https://unpkg.com/vue-router/dist/vue-router.js"></script>
148 
149 <div id="app">
150   <h1>Named Views</h1>
151   <ul>
152     <li>
153           <router-link to="/">/</router-link>
154     </li>
155     <li>
156           <router-link to="/other">/other</router-link>
157     </li>
158   </ul>
159   <router-view class="view one"></router-view>
160   <router-view class="view two" name="a"></router-view>
161   <router-view class="view three" name="b"></router-view>
162 </div>
163 
164 js:
165 const Foo = { template: '<div>foo</div>' }
166 const Bar = { template: '<div>bar</div>' }
167 const Baz = { template: '<div>baz</div>' }
168 
169 const router = new VueRouter({
170   mode: 'history',
171   routes: [
172     { 
173       path: '/',
174       components: {
175         default: Foo,
176         a: Bar,
177         b: Baz
178       }
179     },
180     {
181       path: '/other',
182       components: {
183         default: Baz,
184         a: Bar,
185  b:Foo
186       }
187     }
188   ]
189 })
190 
191 new Vue({
192     router,
193       el: '#app'
194 })

 

posted @ 2017-07-24 15:08  蛋Mrs炒饭  阅读(213)  评论(0编辑  收藏  举报