首頁 > web前端 > js教程 > 主體

Vue.js中的動態路由實例詳解

小云云
發布: 2018-03-13 16:03:24
原創
2005 人瀏覽過

在文章使用vue-router完成簡單導航功能 中實現的路由導航功能是不能傳遞參數的,也就是說是靜態路由。而能傳遞參數的路由模式,由於可以傳遞參數,所以其對應的路由數量是不確定的,故稱之為 動態路由。

那麼如何將參數當作路由呢?

在參數名稱前面加上: ,然後將參數寫在路由的path

##如下範例:

  routes: [    //将页面组件与path指令的路由关联
    { name: 'BookInfo', path: '/books/:id', component: BookInfo }
  ]
登入後複製
登入後複製

這樣定義之後,

vue-router就會符合所有的:/books/1,/books/2,/books/3 …,所以說這樣定義的路由的數量是不確定的。

我們加入一個params 屬性來指定特定的參數值<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;li&gt; &lt;router-link :to =&quot;{name:&amp;#39;BookInfo&amp;#39;,params :{id:1}}&quot; &gt; &lt;p&gt;首页&lt;/p&gt; &lt;/router-link&gt; &lt;/li&gt;</pre><div class="contentsignin">登入後複製</div></div><div class="contentsignin">登入後複製</div></div>

上面的連結對應就為: http://localhost:8080/__dirname/books/1

如果需要傳入多個參數值,只要按照上面的命名方法來加入參數,傳遞在params中對應的宣告參數值即可,vue-router只要符合到路由模式的定義就會自動對參數進行分解取值


path: '/books/version/:id',則對應params為:params :{id:1,version:1}


那麼現在就面臨這一個問題- 如何從路由中將這個參數值讀取出來呢?

答案:透過
$route.params這個屬性取得指定的參數值,如:this.$route.params.id,this.$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完成簡單導航功能中實現的路由導航功能是不能傳遞參數的,也就是說是靜態路由。

而能傳遞參數的路由模式,由於可以傳遞參數,所以其對應的路由數量是不確定的,故稱之為

動態路由

那麼如何將參數當作路由呢?

在參數名稱前面加上

: ,然後將參數寫在路由的path

##如下範例:
  routes: [    //将页面组件与path指令的路由关联
    { name: &#39;BookInfo&#39;, path: &#39;/books/:id&#39;, component: BookInfo }
  ]
登入後複製
登入後複製

這樣定義之後,

vue-router

就會符合所有的:/books/1,/books/2,/books/3 …,所以說這樣定義的路由的數量是不確定的。

我們加入一個params 屬性來指定特定的參數值<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;li&gt; &lt;router-link :to =&quot;{name:&amp;#39;BookInfo&amp;#39;,params :{id:1}}&quot; &gt; &lt;p&gt;首页&lt;/p&gt; &lt;/router-link&gt; &lt;/li&gt;</pre><div class="contentsignin">登入後複製</div></div><div class="contentsignin">登入後複製</div></div>上面的連結對應就為: http://localhost:8080/__dirname/books/1

如果需要傳入多個參數值,只要按照上面的命名方法來加入參數,傳遞在params中對應的宣告參數值即可,vue-router只要符合到路由模式的定義就會自動對參數進行分解取值

path: '/books/version/:id'
,則對應params為:params :{id:1,version:1}

那麼現在就面臨這一個問題- 如何從路由中將這個參數值讀取出來呢?
答案:透過

$route.params
這個屬性取得指定的參數值,如:this.$route.params.id,this.$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中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!