Vue项目--路由跳转的分析

 路由跳转可以选择声明式导航或编程式导航。由于本项目的三级联动的所有a标签都能点击,所以如果采用声明式(router-link)会一下创建上千个router-link(router-link本身是vue的实例化对象vue-component),很耗内存,导致卡顿。所以最后选择编程式导航,给父标签添加点击事件。

最后用事件的委派和编程式导航。

事件委派将@click事件绑定给所有元素的父标签--即左侧导航栏的最外层div,但是事件委派存在两个问题:1.只有点击父div中的a标签才跳转,怎么确定点击的是a标签呢?2.a标签分为一二三级category,怎么确定点击的是哪一级,从而在跳转时给query不同的参数名呢?

采用的解决办法是:给a标签绑定两个自定义属性:data-categoryName和data-category1Id / data-category2Id / data-category3Id 第一个用来确定是否是a标签,并获取到对应的categoryName,第二个用来确定是几级分类,并获取categoryId。

注意:绑定自定义属性的方法:data-(驼峰式命名的自定义属性名)

        获取自定义属性的方法element.dataset (这里获取的自定义属性名是浏览器自动将驼峰式都转化为小写了)

给最外层父组件绑定点击事件:

<div class="all-sort-list2" @click.stop="goSearch">

添加自定义属性:

<a
  :data-categoryName="c1.categoryName"
  :data-category1Id="c1.categoryId"
>
</a>

路由跳转实现:

goSearch(event) {
      let target = event.target;
      let { categoryname, category1id, category2id, category3id } =
        target.dataset; //dataset能获取到结点的自定义属性和值,直接将其解构出来
        //注意原本的驼峰式命名要全部改成小写!!!
      if (categoryname) {
        let query = { categoryName:categoryname };//query的编辑
        if (category1id) {
          query["category1Id"] = category1id;
        } else if (category2id) {
          query["category2Id"] = category2id;
        } else if (category3id) {
          query["category3Id"] = category3id;
        }
        this.$router.push({//路由跳转
          name: "search",
          query,
        });
      }
    },

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Vue的router-link组件可以用于跳转到指定的路由。如果需要在子路由进行跳转,可以在router-link指定子路由的路径。 例如,如果有一个父路由为"/parent",子路由为"/parent/child",可以使用以下代码进行跳转: ``` <router-link to="/parent/child">跳转到子路由</router-link> ``` 这样就可以在父路由跳转到子路由了。需要注意的是,子路由的路径应该是相对于父路由的路径的。 ### 回答2: 在Vue.js,router-link是一个用于创建可访问URL的组件。它基本上是一个a标签,但它能够让你设置HTML5的history API的路由,这意味着你不会重新加载页面,从而实现了单页面应用程序的跳转。 而子路由跳转是指在一个页面,有多个子路由,当用户点击其一个子路由的时候,只有这个子路由的内容会被渲染出来,而其他的子路由不会重新渲染。 实现子路由跳转,需要在路由配置设置子路由,如下所示: ``` const router = new VueRouter({ routes: [ { path: '/parent', component: Parent, children: [ { path: 'child1', component: Child1 }, { path: 'child2', component: Child2 } ] } ] }) ``` 在这里,我们设置了一个父路由/parent,它有两个子路由/parent/child1和/parent/child2。当用户点击/parent/child1,Child1组件会被渲染到Parent组件,而/parent/child2同理。 为了实现在模板进行子路由跳转,我们可以使用router-link组件。在router-link组件,我们需要设置to属性,它的值应该是子路由的路径。例如: ``` <router-link to="/parent/child1">Child 1</router-link> <router-link to="/parent/child2">Child 2</router-link> ``` 当用户点击Child 1或Child 2时,对应的子路由组件将被渲染到Parent组件,实现子路由跳转功能。 总的来说,router-link子路由跳转Vue Router提供的一种方便的路由管理方。通过设置子路由和在模板使用router-link组件,我们可以快速实现在单页面切换不同子路由的功能,提供更好的用户体验。 ### 回答3: Vue Router 是 Vue.js 官方的路由管理器,它基于 Vue.js 的动态组件系统,可将组件与路由映射关联。Router 可以为 Vue 应用提供基于 URL 的导航与视图管理功能。而 router-link 是在 Vue Router 提供的一种用于路由导航的组件。在 Vue Router 路由是以层级结构来组织的。有时候,我们需要在一个路由内部打开子路由,比如在一个有子路由的页面上点击链接实现内部跳转,这时可以用到 router-link 的子路由跳转功能。 router-link 是 Vue Router 提供的用于路由导航的组件,它接收一个 to 参数,用于指定要跳转路由路径。如果在 to 参数使用了"/"和子路由的路径,就可以实现子路由跳转的功能。例如: ``` <router-link to="/parent"> 去父级 </router-link> <router-link to="/parent/child"> 去子级 </router-link> ``` 这段代码,第一个 router-link 组件的 to 参数为 "/parent",意思是跳转到父级路由;第二个 router-link 组件的 to 参数为 "/parent/child",意思是跳转到子路由。当点击第二个 router-link 组件时,就会实现从父级路由跳转到子级路由的效果。 需要注意的是,当使用路由时,需要在父组件使用 router-view 组件占位显示子组件,如下: ``` <template> <div> <h1>父级组件</h1> <router-view/> </div> </template> ``` 这样,子组件就会显示在父组件,实现了子路由跳转。 总的来说,Vue Router 提供了强大的路由导航功能,而 router-link 组件则是其很重要的一部分。如果需要在一个路由内部打开子路由,可以采用 router-link 的子路由跳转功能,具体可以在 to 属性设置"/"和子路由的路径。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值