Перенаправление Vue-Router при ошибке в функции props

У меня есть это определение маршрута:

{name: "article", path: "/article/:id", component: Article, props: true}

И этот компонент (я использую Typescript и vue-class-component):

@Component({
    props: {
        id: Number
    }
})
class Article extends Vue {
    id: Number;
}

Конечно, это дает мне это предупредить

[Vue warn]: Invalid prop: type check failed for prop "id". Expected Number, got String.

Поэтому я обновляю свое определение маршрута с помощью функции реквизита

name: "article", 
path: "/article/:id", 
component: Article, 
props:(route:Route) => {
    const id = parseInt(route.params.id);

    if(isNaN(id))
        throw new Error("id param should be a number")

    return {id}
}

Это работает, но я не могу найти, как перенаправить пользователя на определенную страницу, если он дал мне "плохое" значение для параметра id (например, "/article/toto")

router.onError, кажется, здесь не работает

Навигационные охранники, где можно использовать следующий (ошибка), не могут изменять параметры / реквизиты

У кого-нибудь есть идеи?

1 ответ

Все значения в параметрах URL имеют type String,

В вашем компоненте установите часы для этого конкретного свойства

props : ["id"],
watch : {
    id(current,previous){
      var reg = /^\d+$/;
      if(reg.test(current)){
        console.log("its a number");
      }
      else{
        console.log("its not a number");
        this.$router.push("/error"); //HomeComponent or ErrorComponent
      }
    }
  }

Теперь, когда часы настроены, вы можете проверить, имеет ли ваше текущее значение в prop тип Number или String, используя Regex.

if currentValue is Number then 
    GoAhead
if currentValue is NAN then 
    Redirect to HomeComponent or ErrorComponent
Другие вопросы по тегам