基于vue2 封装的面包屑 tag数量问题

基于vue2 封装的面包屑 tag数量问题

目的: 封装一个面包屑

我的思路是:在面包屑组件中(该组件常驻)通过watch监听$route然后向routes数组中push $route ,后续的面包屑点击需要用到route

问题:push次数不可控

watch: {

$route: function() {

if (this.routes.length > 9) {

this.$message("最多打开十个标签");

return;

}

for (let i = 0; i < this.routes.length; i++) {

console.log(this.routes[i]);

if (this.routes[i].name !== this.$route.name) {

// 遍历添加之前的路线数组

this.routes.push({ name: this.$route.name, title: this.$route.meta.title });

// 第一次和第二次跳转正常

// 第三次跳转,第三次的路线会push两次,

// 第四次跳转,第四次的路线会push四次,

// 第五次跳转,第五次的路线会push六次

// 就像上面那样依次递增

}

}

},

routes() {

window.localStorage.setItem("route", JSON.stringify(this.routes));

},

},

created() {

this.routes = JSON.parse(window.localStorage.getItem("route")) || [

{ name: "userList", title: "认证用户列表" },

];

},


回答:

你应该查找routes中没有该name,然后添加,而不是判断每一项进而添加。举个简单的例子,你有一个数组[1, 2],现在判断的目标是3,会遍历两次,第一次判断1不等于3,会向数组中添加一次3,第二次判断2不等于3,又会向数组中添加一次3,就是这个道理

把for循环替换成下面代码

if(!this.routes.some(route => route.name === this.$route.name)){

this.routes.push({ name: this.$route.name, title: this.$route.meta.title });

}

以上是 基于vue2 封装的面包屑 tag数量问题 的全部内容, 来源链接: utcz.com/p/937146.html

回到顶部