Vue Router 之 Props

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

内容简介:雖然我們可以使用macOS Mojave 10.14.5Node 12.4.0

雖然我們可以使用 this.$route 去存取目前 Route,但 Component 在開發時,你無法確認 user 是否使用 Vue Router,畢竟 Vue Router 是選配,也無法確認會用什麼 Params 或 Query String,比較好的方式還是回歸 Component 正統設計方式:使用 Props。

Version

macOS Mojave 10.14.5

Node 12.4.0

Vue CLI 3.8.4

Vue 2.6.10

Vue-router 3.0.3

$route

Vue Router 之 Props

  1. 當網址為 /products/1
  2. 顯示 Product component 的 T-Shirts

router.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'),
}

path 使用 id param。

Product.vue

<template>
  <div>
    <h1>Products</h1>
    <h2>{{ product }}</h2>
  </div>
</template>

<script>
let products = {
  0: 'Shoes',
  1: 'T-Shirts',
  2: 'Pants',
};

let product = function() {
  return products[this.$route.params.id] || 'N/A';
};

export default {
  name: 'Products',
  computed: {
    product,
  },
};
</script>

15 行

let product = function() {
  return products[this.$route.params.id] || 'N/A';
};

需使用 this.$route 存取 route,也就是 component 與 Vue router 耦合。

以 component 角度,並不確定 user 一定有使用 Vue router,也不確定是否使用 params 傳進資料,若 component 這樣寫,重複使用程度就很低,比較好的方式是改用 props。

By Boolean

router.js

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

path 寫法不變,加上 props: true ,表示 Vue router 會將 id 以 props 傳進 products component。

Products.vue

<template>
  
 <div>
    
  <h1>Products</h1>
    
  <h2>{{ product }}</h2>
  
 </div>

</template>

21 行

props: [
  'id'
],

新增 id props。

15 行

let product = function() {
  return products[this.id] || 'N/A';
};

由原本的 this.$route.params.id 改成 this.id

其中 id 是 props, component 就不跟 Vue router 耦合了。

By Object

router.js

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

props property 改傳入 object, id 為 props。

若想由 router.js 傳入固定值給 component,這是個好方法

Product.vue 寫法不變。

By Function

router.js

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

Props 也可使用 function,會傳入 route 物件,可回傳 object,直接對 props 操作。

這種寫法最靈活,若要在 router.js 傳入的 props 有邏輯,則建議使用此方法

Conclusion

  • Vue Router 支援 component 的 props,除了最基本的 boolean 外,還支援了 object 與 function
  • By object 可讓我們在 router 自行傳入資料客製化 component
  • By function 則最靈活,我們可直接在 arrow function 寫邏輯改變要傳入的 props

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

查看所有标签

猜你喜欢:

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

High Performance Python

High Performance Python

Micha Gorelick、Ian Ozsvald / O'Reilly Media / 2014-9-10 / USD 39.99

If you're an experienced Python programmer, High Performance Python will guide you through the various routes of code optimization. You'll learn how to use smarter algorithms and leverage peripheral t......一起来看看 《High Performance Python》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

随机密码生成器
随机密码生成器

多种字符组合密码

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具