Vue-router导航问题
现在的项目,用的是Vue,但当时用的时候,是边学边做的,上手确实比较简单,但是已经用Vue写了一个项目了,但是感觉对Vue的还是不是很深刻,用的都是比较简单的API,
现在回头看看,有些东西,非常的精巧和实用,现在回顾一下:
1.index
<ul @click='godetail'> <li v-for="(item,index) in list">{{ index }}.{{ item.content }}</li> </ul>
循环显示内容的时候,当需要显示index值的时候,index需要再item后面,如果index在item前面会显示item对象
2.params() 动态路由匹配
我们经常需要把某种模式匹配到的所有路由,全部映射到同个组件,例如我们有一个second组件,对于所有ID各不相同的用户,都要使用这个组件来渲染。
router.js配置
{ path: '/second/:id', name: 'second', component: second }
vue页面
<p> <router-link to="/second/foo">foo</router-link> <router-link to="/second/bar">bar</router-link> </p> second {{ $route.params.id }} <router-view></router-view>
在页面上显示的内容
/second/foo
和 /second/bar
都将映射到相同的路由second上,不用写新的vue组件。
3.命名式导航
在官网上介绍了一种命名路由,因为我一直是使用直接push()路径的,最近也在研究它俩的区别,
<router-link :to="{path:'/content/three',query:{openid:this.openid}}" >
用下来,个人还是比较喜欢直接push()路径的
例
一级路由里面有first和second路由
<router-link :to="{ name: 'first', params: {name:1} }">first</router-link> <router-link :to="{ name: 'second', params: {name:2} }">second</router-link> <router-view/>
然后first路由里面又有detail和test路由
<router-link :to="{ name: 'detail', params:{name:1}}">detail</router-link> <router-link :to="{ name: 'test', params:{name:2}}">test</router-link> <router-view></router-view>
在路由配置里
routes: [ { path: '/first', name: 'first', component: first, children: [ { path: 'detail', name: 'detail', component: detail }, { path: 'test', name: 'test', component: test }, { path: '/', //first直接重定向至detail路由 name: 'detail', redirect: 'detail' } ] }, { path: '/second', name: 'second', component: second }, { path: '', name: 'first', redirect: 'first' } ]
在测试过程中,首次进入,是可以直接重定向至first/detail路由的,但是当我点击second路由,再次点击first按钮时,就无法重定向至detail,只能手动点击,
重定向会失效,所以在使用命名导航时,尽量不要不要涉及父子路由嵌套的关系,最好是导航至某个特定页面。所以不建议大范围使用命名式导航
4.直接路径导航 <router-link :to="{path:'/content/three'}" >
在使用path导航的时候,也遇到一些问题
<router-link :to="{path:'/content/three'}" >
例如,是这样配置路由的,
{ path: 'index', name: 'Index', component: Index }, { path: 'sec', name: 'Sec', component: Sec, children: [ { path: 'repair', component: repair }, { path: '/', redirect: 'repair' } ] }, { path: 'three', name: 'Three', component: Three }
在使用repair路由时,有时需要传一些参数,
在此时的sec组件却不在active状态,究其原因,就是因为repair
携带了参数,与配置的路由不匹配,所以无法找到父级路由,所以用下来感觉都不是那么完美,也许自己理解的有误,但是目前目前遇到的情况确实是这样。
<router-link :to="{path:'/sec/repair',query:{id:this.id}}" >