2017-06-28 9 views
2

照会パラメーターによってルーティングする方法はありますか?私は次のルートに一致したい:site.com/?foo=123。私は照会ルートに一致する照会パラメーター

{ path: '/\?foo=[\d]*' } 

のようなものを試してみました。

+0

'$ router.push'を呼び出すときに' query'オブジェクトを渡すことができます。それはあなたが意味することですか?あるいは、予想される行動や、さらに明確には機能しないことを記述できますか? – thanksd

+0

@thanksdいいえ、それは私が意味するものではありません。 '/:id'のような"通常の "idとは対照的に、クエリ文字列パラメータに基づいたルートに一致させたい、'/\ id = [\ d] * 'と' /?id = 123' – Johan

答えて

2

残念ながら、ルート定義のpath文字列のクエリパラメータを照合することはできません。

Vueのルータはpath-to-regexpを使用し、its documentationは言う:

へのパス正規表現によって返された正規表現は、パス名またはホスト名で使用するためのものです。クエリ文字列やURLのフラグメントを処理することはできません。


あなたのparamそうのような名前の後の括弧内の正規表現を指定することで、ルートのparamに一致する正規表現を使用することができます。

{ path: '/:foo([\d]*)' }, 

しかし、Vueのルーターのルートのparamsに」クエリ内にあること。

Here are some examples of the different route-matching features Vue Router provides.


あなたは本当に、URLのクエリをチェックする必要がある場合は、手動でクエリに一致するbeforeEnterハンドラを使用することができますし、それが正しい形式でない場合リルート:

const routes = [{ 
    name: 'home', 
    path: '/', 
    component: Home, 
    beforeEnter(to, from, next) { 
    if (to.query.foo && to.query.foo.match(/[\d]*/)) { 
     next({ name: 'foo', query: to.query }); 
    } else { 
     next(); 
    } 
    } 
}, { 
    name: 'foo', 
    path: '/', 
    component: Foo, 
}]; 
+0

説明、ありがとうございました – Johan

関連する問題