Vue路由器的beforeEach方法的无限循环

时间:2020-06-10 17:33:50

标签: vue.js vue-router infinite-loop

如果params的名称是特定的,我想替换to的{​​{1}}中的一个,而我不知道为什么这不起作用。

to

我在做什么错了?

1 个答案:

答案 0 :(得分:1)

请不要将状态存储在meta属性中。相反,您可以检查名称是否已编码:

function needsEncode(route) {
  return route.meta && route.meta.encode && ( // <-- changes start here
    decodeURIComponent(to.params.name) === to.params.name
  ) // <-- changes ends here
}
router.beforeEach(async (to, from, next) => {
  if (to.name === 'Details Page' && needsEncode(to)) {
    const toEncoded = Object.assign({}, to, {
      // remove meta
      //meta: {
      //  encode: false,
      //},
      params: {
        name: encodeURIComponent(to.params.name),
        id: to.params.id,
     },
    });
    return next(toEncoded);
  }
  return next();
}

如果decodeURIComponent(to.params.name)与名称相同,则尚未对其进行编码,您可以继续对其进行编码。