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