Vue.js での動的ルーティングの例の詳細な説明

小云云
リリース: 2018-03-13 16:03:24
オリジナル
1967 人が閲覧しました

vue-routerを使用してシンプルなナビゲーション機能を完成させる記事で実装されたルートナビゲーション機能はパラメータを渡すことができないため、静的ルートになります。パラメータを渡すことができるルーティングモードは、パラメータを渡すことができるため、対応する経路の数が不定であるため、ダイナミックルーティングと呼ばれます。

では、パラメーターをルートとして使用するにはどうすればよいでしょうか?

パラメータ名の前に : を追加し、ルートの path にパラメータを書き込みます : ,然后将参数写在路由的 path

如下示例:

  routes: [    //将页面组件与path指令的路由关联
    { name: 'BookInfo', path: '/books/:id', component: BookInfo }
  ]
ログイン後にコピー
ログイン後にコピー

这样定义之后,vue-router就会匹配所有的:/books/1,/books/2,/books/3 ……,所以说这样定义的路由的数量是不确定的。

<router-link> 我们加入一个 params

次の例:

        <li>
          <router-link :to ="{name:&#39;BookInfo&#39;,params :{id:1}}" >
            <p>首页</p>
          </router-link>
        </li>
ログイン後にコピー
ログイン後にコピー

この定義の後、vue-router は、/books/1,/books/2,/books/3... のすべてに一致するため、定義されているルートの数はこの方法は明確ではありません。

<router-link> に、params 属性を追加して、特定のパラメータ値を指定します

<p>当前图书编号是:{{$route.params.id}}</p>
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
path: &#39;/books/version/:id&#39;,则对应params为:params :{id:1,version:1}


那么现在就面临这一个问题 —— 如何从路由中将这个参数值读取出来呢?
答:通过 $route.params这个属性获取指定的参数值,如:this.$route.params.id,this.$route.params.msg

如果希望在相应的组件页面内输出参数值,对应代码如下:

export default {  name: "app",  created() {    alert(this.$route.params.id);  }};
ログイン後にコピー

如果想在js代码中根据参数值做相应的处理,则在默认路由中加入如下代码:

<script>
export default {  name: "app",
  watch :{
    &#39;$route&#39; (to,from){
      alert(to.params.id);
    }
  }
};
</script>
ログイン後にコピー

当使用路由参数的时候,如 从/books/1/books/2上記のリンクは、http://localhost: 8080 に対応します。 /__dirname/books/1
複数のパラメータ値を渡す必要がある場合は、上記の命名方法に従ってパラメータを追加し、対応する宣言されたパラメータ値を params に渡すだけで済みます。定義は自動的にパラメータを分解して値を取得しますcreated mounted 等钩子函数在页面第二次加载的时候回失效。

那么,当复用组件时候,想对路由参数的变化做出响应的话,就需要在 $watch 对象内添加对 $route 对象变化的跟踪函数

{ name: &#39;BookInfo&#39;, path: &#39;/books/:id/?bookName=Lost&#39;, component: BookInfo }
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

$route.params 定义的参数必然是整个路由的其中一部分,vue-router 还可以让我们使用 "/path?param = value" 的方式传递参数,可以使用$route.query.参数名 获取参数值
vue-router 还提供一种常量参数定义 meta,我们可以在路由定义中先定义 meta 的值,然后在路由实例中通过$route.meta 参数获取具体常量值。

如下代码($route.query.参数名

{ name: &#39;BookInfo&#39;, path: &#39;/books/:id&#39;, component: BookInfo ,meta: { bookName : &#39;Lost In River&#39; }}
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

获取其中 bookName 的值的代码为 this.$route.query.msg

如下代码($route.meta.参数名

  routes: [    //将页面组件与path指令的路由关联
    { name: &#39;BookInfo&#39;, path: &#39;/books/:id&#39;, component: BookInfo }
  ]
ログイン後にコピー
ログイン後にコピー

获取其中 bookName 的值的代码为 this.$route.meta.bookName

在文章 使用vue-router完成简单导航功能 中实现的路由导航功能是不能传递参数的,也就是说是静态路由。

而能传递参数的路由模式,由于可以传递参数,所以其对应的路由数量是不确定的,故称之为 动态路由

那么如何将参数作为路由呢?

在参数名前面加上 : ,然后将参数写在路由的 path

如下示例:

        <li>
          <router-link :to ="{name:&#39;BookInfo&#39;,params :{id:1}}" >
            <p>首页</p>
          </router-link>
        </li>
ログイン後にコピー
ログイン後にコピー

这样定义之后,vue-router就会匹配所有的:/books/1,/books/2,/books/3 ……,所以说这样定义的路由的数量是不确定的。

<router-link> 我们加入一个 params たとえば、path: '/books/version/:id' の場合、対応する params は次のようになります: params:{id:1,version:1}< /code> </p></blockquote><hr/><p> さて、ここで私たちはこの問題に直面しています - このパラメータ値をルートからどのように読み取るか? </p>回答: <code>$route.params 属性を通じて、指定されたパラメータ値を取得します (this.$route.params.idthis.$route など)。 params .msg

対応するコンポーネントページにパラメータ値を出力したい場合、対応するコードは以下の通りです:

<p>当前图书编号是:{{$route.params.id}}</p>
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
path: &#39;/books/version/:id&#39;,则对应params为:params :{id:1,version:1}


那么现在就面临这一个问题 —— 如何从路由中将这个参数值读取出来呢?
答:通过 $route.params这个属性获取指定的参数值,如:this.$route.params.id,this.$route.params.msgjs コードを入力し、次のコードをデフォルト ルートに追加します:

export default {  name: "app",  created() {    alert(this.$route.params.id);  }};
ログイン後にコピー
ログイン後にコピー

/books/1 から /books/2 などのルート パラメーターを使用する場合 では、両方のルートが同じコンポーネントをレンダリングするため、元のコンポーネント インスタンスは再利用され、再利用の販売率はコンポーネントを破棄して再作成するよりも高くなります。 🎜 これは、コンポーネントのライフサイクル フックが呼び出されなくなることを意味します (コンポーネントは破棄されてから作成されません)。つまり、created Mounted とその他のフック関数は、ページがロードされるときに無効になります。 2回目。 🎜🎜🎜 したがって、コンポーネントを再利用するときに、ルーティング パラメータの変更に対応したい場合は、$watch オブジェクト内に $route</code を追加する必要があります。オブジェクトの変更の追跡機能 🎜🎜<div class="code" style="position:relative; padding:0px; margin:0px;"><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false;">&lt;script&gt; export default { name: &quot;app&quot;, watch :{ &amp;#39;$route&amp;#39; (to,from){ alert(to.params.id); } } }; &lt;/script&gt;</pre><div class="contentsignin">ログイン後にコピー</div></div><div class="contentsignin">ログイン後にコピー</div></div><hr/>🎜🎜<code>$route.params 定義されたパラメータはルート全体の一部である必要があります。vue-router は、 "/path?param = value" を使用してパラメータを渡します。$route.query.parameter name を使用してパラメータ値を取得できます🎜vue-router< / code> は定数パラメータ定義 <code>meta も提供します。まずルート定義で meta の値を定義し、次に $route.meta を渡すことができます。ルーティング インスタンス。 パラメータは特定の定数値を取得します。 🎜🎜以下のコード($route.query.パラメータ名)🎜
{ name: &#39;BookInfo&#39;, path: &#39;/books/:id/?bookName=Lost&#39;, component: BookInfo }
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
🎜bookNameの値を取得するコードはthis.$です。 Route.query.msg🎜🎜以下のコード($route.meta.parameter name)🎜
{ name: &#39;BookInfo&#39;, path: &#39;/books/:id&#39;, component: BookInfo ,meta: { bookName : &#39;Lost In River&#39; }}
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー
🎜bookNameの値を取得するコードは< code>this.$route.meta.bookName🎜🎜 vue-router を使用してシンプルなナビゲーション関数を完成するという記事で実装されたルート ナビゲーション関数はパラメーターを渡すことができません。つまり、静的ルートです。 🎜🎜パラメータを渡すことができるルーティングモード、パラメータを渡すことができるため、対応するルートの数が不確実であるため、🎜ダイナミックルーティングと呼ばれます🎜🎜🎜では、パラメータをルートとして使用するにはどうすればよいでしょうか? 🎜🎜🎜パラメータ名の前に : を追加し、ルートの path にパラメータを書き込みます 🎜🎜次の例: 🎜rrreee🎜この定義の後、vue-router は、/books/1,/books/2,/books/3... のすべてに一致するため、定義されているルートの数はこの方法は明確ではありません。 🎜🎜 <router-link> に、params 属性を追加して、特定のパラメータ値を指定します🎜rrreee🎜上記のリンクは、http://localhost: 8080 に対応します。 /__dirname/books/1🎜🎜🎜 複数のパラメータ値を渡す必要がある場合は、上記の命名方法に従ってパラメータを追加し、対応する宣言されたパラメータ値を params に渡すだけで済みます。定義は自動的にパラメータを分解して値を取得します🎜 たとえば、path: '/books/version/:id' の場合、対応する params は次のようになります: params:{id:1,version:1}< /code> 🎜</blockquote><hr/>🎜 さて、ここで私たちはこの問題に直面しています - このパラメータ値をルートからどのように読み取るか? 🎜回答: <code>$route.params 属性を通じて、指定されたパラメータ値を取得します (this.$route.params.idthis.$route など)。 params .msg🎜🎜対応するコンポーネントページにパラメータ値を出力したい場合、対応するコードは次のとおりです: 🎜
<p>当前图书编号是:{{$route.params.id}}</p>
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

如果想在js代码中根据参数值做相应的处理,则在默认路由中加入如下代码:

export default {  name: "app",  created() {    alert(this.$route.params.id);  }};
ログイン後にコピー
ログイン後にコピー

当使用路由参数的时候,如 从/books/1/books/2 ,原来的组件实例会被复用,因为两个路由都渲染同一个组件,比起销毁后再创建,复用的销率会更高。
这也就是说 组件的生命周期钩子不会再被调用(组件没有被销毁后再创建) ,即 created mounted 等钩子函数在页面第二次加载的时候回失效。

那么,当复用组件时候,想对路由参数的变化做出响应的话,就需要在 $watch 对象内添加对 $route 对象变化的跟踪函数

<script>
export default {  name: "app",
  watch :{
    &#39;$route&#39; (to,from){
      alert(to.params.id);
    }
  }
};
</script>
ログイン後にコピー
ログイン後にコピー

$route.params 定义的参数必然是整个路由的其中一部分,vue-router 还可以让我们使用 "/path?param = value" 的方式传递参数,可以使用$route.query.参数名 获取参数值
vue-router 还提供一种常量参数定义 meta,我们可以在路由定义中先定义 meta 的值,然后在路由实例中通过$route.meta 参数获取具体常量值。

如下代码($route.query.参数名

{ name: &#39;BookInfo&#39;, path: &#39;/books/:id/?bookName=Lost&#39;, component: BookInfo }
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

获取其中 bookName 的值的代码为 this.$route.query.msg

如下代码($route.meta.参数名

{ name: &#39;BookInfo&#39;, path: &#39;/books/:id&#39;, component: BookInfo ,meta: { bookName : &#39;Lost In River&#39; }}
ログイン後にコピー
ログイン後にコピー
ログイン後にコピー

获取其中 bookName 的值的代码为 this.$route.meta.bookName

相关推荐:

vue router动态路由和嵌套路由实例详解

以上がVue.js での動的ルーティングの例の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!