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

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

查看所有标签

猜你喜欢:

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

游戏编程权威指南

游戏编程权威指南

Mike McShaffry 麦克沙福瑞、David “Rez” Graham 格雷海姆 / 师蓉、李静、李青翠 / 人民邮电 / 2016-3 / 99.00元

全书分为4个部分共24章。首部分是游戏编程基础,主要介绍了游戏编程的定义、游戏架构等基础知识。 第二部分是让游戏跑起来,主要介绍了初始化和关闭代码、主循环、游戏主题和用户界面等。 第三部分是核心游戏技术,主要介绍了一些*为复杂的代码 示例,如3D编程、游戏音频、物理和AI编程等。 第四部分是综合应用,主要介绍了网络编程、多道程序设计和用C#创建工具等,并利用前面所讲的 知识开发出......一起来看看 《游戏编程权威指南》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具