Vue Router 之 Named Routes

栏目: JavaScript · 发布时间: 4年前

内容简介:實務上我們不希望Vue 2.6.10Vue-router 3.0.3

實務上我們不希望 <router-link/> 直接綁定一個 Route,這樣將來 route 改變時,會所有 <router-link/> 都要改,而希望綁定到一個 Name,這樣將來 Route 改變時,只要修改 route.js 即可,而不用每個 HTML Template 都修改。

Version

Vue 2.6.10

Vue-router 3.0.3

Vue CLI 3.8.4

Normal Route

Vue Router 之 Named Routes

Product
/products/1
T-Shirts

route.js

import Vue from 'vue';
import Router from 'vue-router';
import Home from './views/Home.vue';

Vue.use(Router);

export default new Router({
  routes: [
    {
      path: '/',
      name: 'home',
      component: Home
    },
    {
      path: '/about',
      name: 'about',
      component: () => import(/* webpackChunkName: "about" */ './views/About.vue')
    },
    {
      path: '/products/:id',
      name: 'products',
      component: () => import(/* webpackChunkName: "products" */ './views/Products.vue'),
    },
  ]
});

19 行

{
  path: '/products/:id',
  name: 'products',
  component: () => import(/* webpackChunkName: "products" */ './views/Products.vue'),
},

當 route 為 /products/:id 時,使用 Products component。

App.vue

  

第 6 行

<router-link to="/products/1">Product</router-link>

<router-link/>to 直接綁定 /products ,若將來 route 修改,則所有 HTML template 的 <router-link/> 都要跟著改。

Named Route

route.js

{
  path: '/products/:id',
  name: 'products',
  component: () => import(/* webpackChunkName: "products" */ './views/Products.vue'),
},

Route object 有 name property,其實就是用來使用 named route。

App.vue

  

第 6 行

<router-link :to="{ name:'products', params: { id: 1 }}">Product</router-link>

<router-link/>to 改用 attribute binding 到 route object,其 name 就是在 route.js 設定的 name

若要綁定到 param,則加上 params property。

Router.push() by Name

App.vue

<template>
  <div id="app">
    <div id="nav">
      <router-link to="/">Home</router-link> |
      <router-link to="/about">About</router-link> |
      <a href="#" @click="onProductClick">Product</a>
    </div>
    <router-view/>
  </div>
</template>

<script>
let onProductClick = function() {
  this.$router.push({ name: 'products', params: { id: '1' } });
};

export default {
  name: 'app',
  methods: {
    onProductClick,
  }
}
</script>

除了使用 <router-link> tag 外,也可以使用 JavaScript。

第 6 行

<a href="#" @click="onProductClick">Product</a>

改用 HTML 的 <a> ,為了有底線,所以要保留 href="#" ,改用 onProductClick() 跳轉頁面。

13 行

let onProductClick = function() {
  this.$router.push({ name: 'products', params: { id: '1' } });
};

將 object 傳入 this.$router.push() ,其中 name property 為 route 名稱, params property 為 要傳入資料。

Router.push() by Path

let onProductClick = function() {
  this.$router.push({ path: 'products/1' });
};

也可以改用 path property,此時使用 string 即可。

Arrow Function

import router from './router';

let onProductClick = () => router.push({ path: 'products/1' });

若你很討厭透過 this context 存取 $route ,導致得使用 function expression 的話,也可以將 router import 進來,如此就可大膽使用 arrow function。

Conclusion

  • Named route 讓 <router-link/> 沒綁死特定 route,將來更容易維護
  • 除了使用 <router-link/> 外,也可使用 JavaScript 的 router.push()
  • 若你喜歡 arrow function,也可將 router import 進來,如此就不需依賴 this context 存取 $router

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

轻营销

轻营销

唐文 / 机械工业出版社 / 2015-6 / 35元

《轻营销》,中国第一本全面讲述如何在互联网新时代用小预算做大营销的书籍,以求把中小微企业从那些以大预算为基础而难以落地的营销理论和案例中解脱出来。用“轻”但真正起作用的方法,帮助传统企业抓住互联网新一波浪潮的机遇,转型升级。 “怒打价格战、拼命砸广告、渠道金字塔”是过去中国企业做营销的基本功课,背后的逻辑是花钱。今天这三招已经不太管用了,广告费用的多少不再是决定性因素。取而代之的是直面客户的......一起来看看 《轻营销》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

Markdown 在线编辑器
Markdown 在线编辑器

Markdown 在线编辑器

UNIX 时间戳转换
UNIX 时间戳转换

UNIX 时间戳转换