Vue Router 之 Props

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

内容简介:雖然我們可以使用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

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

查看所有标签

猜你喜欢:

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

Java多线程编程实战指南(设计模式篇)

Java多线程编程实战指南(设计模式篇)

黄文海 / 电子工业出版社 / 2015-10 / 59.00

随着CPU 多核时代的到来,多线程编程在充分利用计算资源、提高软件服务质量方面扮演了越来越重要的角色。而 解决多线程编程中频繁出现的普遍问题可以借鉴设计模式所提供的现成解决方案。然而,多线程编程相关的设计模式书籍多采用C++作为描述语言,且书中所举的例子多与应用开发人员的实际工作相去甚远。《Java多线程编程实战指南(设计模式篇)》采用Java(JDK1.6)语言和UML 为描述语言,并结合作者多......一起来看看 《Java多线程编程实战指南(设计模式篇)》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具