vue的传参方式汇总和router使用技巧

一、介绍

Vue框架中,我们经常需要进行组件之间的传值,根据传参的方式不同,我们又可以将其分为props、$emit、vuex、router、cookie等等。其中,props与$emit的传参方式主要用于组件之间传值,其余的传参方式则主要用于组件之间以及前后端之间的数据交互。

在本篇文章中,我们将对vue的传参方式进行详细的汇总,同时也会涉及到router的使用技巧。

二、props

在Vue中,我们可以在父组件中通过props向子组件传递值。props主要分为两个部分:prop验证和使用props。

1.prop验证

当子组件通过props接收到父组件传递的数据时,我们可以设置一些验证规则以确保数据的正确性。prop验证主要有以下两种方式。

(1)类型验证

props: {
  // 基础类型检测
  propA: Number,
  // 多种类型
  propB: [String, Number],
  // 必传且为字符串
  propC: {
    type: String,
    required: true
  },
  // 带有默认值的数字
  propD: {
    type: Number,
    default: 100
  },
  // 带有默认值的对象
  propE: {
    type: Object,
    default: function () {
      return { message: 'hello' }
    }
  },
  // 自定义验证函数
  propF: {
    validator: function (value) {
      // 这个值必须匹配下列字符串中的一个
      return ['success', 'warning', 'danger'].indexOf(value) !== -1
    }
  }
}

(2)对象验证

const myObject = {
  name: String,
  age: Number
};

props: {
  obj: {
    type: Object,
    validator(value) {
      return Object.keys(value).every(key => Object.keys(myObject).includes(key)); // 第二个对象不允许有不在第一个对象上的key存在。
    }
  }
},

2.使用props

当父组件向子组件传递了值后,我们可以在子组件的template模版中通过{{prop名称}}的方式调用。

<!-- 父组件模版 -->
<template>
  <ChildComponent propA="123" :propB="456">
</template>

<!-- 子组件模版 -->
<template>
  <div>
    <div>{{propA}}</div>
    <div>{{propB}}</div>
  </div>
</template>

<!-- 子组件script中 -->
<script>
export default {
  name: 'ChildComponent',
  props: {
    propA: String,
    propB: Number
  }
}
</script>

三、$emit

与props不同,$emit主要用于子组件向父组件传值。当子组件需要向父组件传值时,我们可以在子组件的methods中使用$emit方法,从而触发父组件中的相应事件,进而实现数据的传递。

<!-- 父组件模版 -->
<template>
  <ChildComponent v-on:myevent="handleEvent"/>
</template>

<!-- 子组件模版 -->
<template>
  <button v-on:click="myClickEvent">点击</button>
</template>

<!-- 子组件script中 -->
<script>
export default {
  name: 'ChildComponent',
  methods: {
    myClickEvent(){
        this.$emit('myevent', 'hello,world');
    }
  }
}
</script>

四、vuex

随着项目的不断发展,组件之间和前后端数据的交互也会变得越来越复杂。这时候,我们需要使用状态管理来管理全局状态。在Vue框架中,我们可以使用vuex来进行状态管理。

vuex主要包含以下4个主要部分:State、Getter、Mutation和Action。

  1. State

我们可以使用State来定义数据存储的状态,state一般用来保存全局的数据。

// 存放全局的数据
const state = {
  count: 0
};
  1. Getter

当我们需要对state中的数据进行处理时,我们可以使用Getter。Getter可以对state的数据进行一些计算操作,然后返回计算后的值,而无需修改state中的实际数据。

// 获取指定的数据
const getters = {
  getCount(state) {
    return state.count
  }
}
  1. Mutation

当我们需要修改state中的数据时,我们可以使用Mutation。Mutation主要用于同步操作,当Mutation被触发时,state中的数据也会被同步更新。

const mutations = {
  increment(state) {
    state.count++
  },
  decrement(state) {
    state.count--
  }
}
  1. Action

当需要执行一些异步操作时,我们可以使用Action。Action通过提交Mutation来改变状态。

const actions = {
  async increment(context) {
    context.commit('increment')
  },
  async decrement(context) {
    context.commit('decrement')
  }
}

五、router

在实际项目开发中,随着前端单页应用的流行,我们经常需要使用router来进行页面之间的跳转。在Vue框架中,我们可以使用vue-router来进行路由管理。

1.基本路由配置

在路由管理中,我们需要首先配置路由,然后使用路由对象来进行跳转。

import Vue from 'vue';
import Router from 'vue-router';
// 组件的引入
import Main from './views/Main.vue';
import Detail from './views/Detail.vue';

Vue.use(Router);

export default new Router({
  routes: [
    {
      path: '/',
      component: Main
    },
    {
      path: '/detail/:id',     // 带有参数的跳转
      component: Detail
    }
  ]
});

2.路由跳转

当路由对象配置完成后,我们就可以使用它来进行页面跳转。我们可以在组件的js文件中使用$router.push方法来进行跳转。

// 带有参数的跳转
this.$router.push('/detail/' + this.id);

3.路由参数获取

当我们通过路由进行页面跳转后,我们需要在跳转后的页面中获取到路由参数。在Vue框架中,我们可以使用$route.params来获取路由参数。

// 获取路由参数
this.$route.params.id

六、总结

本篇文章从props、$emit、vuex和router四个方面对Vue的传参方式进行了整理,并且详细介绍了router的使用技巧。在实际项目中,我们可以根据具体需求进行选择,以便更好地进行数据流管理和页面跳转。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:vue的传参方式汇总和router使用技巧 - Python技术站

(0)
上一篇 2023年5月27日
下一篇 2023年5月27日

相关文章

  • Vue监听数据对象变化源码

    下面我来为您详细讲解Vue监听数据对象变化源码的完整攻略。 监听数据对象变化源码 Vue.js 可以监听 Javascript 对象的变化,并且自动刷新页面的显示。这其实是实现了 Object.defineProperty() 这个方法所暴露的 功能。Vue.js 会在初始化时对属性执行监听,只要被监听的数据首次出现,就会遍历该对象的所有属性,将它们都转为用…

    Vue 2023年5月27日
    00
  • 基于vue2的canvas时钟倒计时组件步骤解析

    文章标题:基于vue2的canvas时钟倒计时组件步骤解析 引言 在Vue2.x中,我们可以使用canvas创建各种各样的动态图形,例如,时钟倒计时组件,此类组件不仅可以为我们的网站增添一丝时尚,同时也可以增强用户的互动性。那么,接下来我们就来详细讲解基于Vue2.x的canvas时钟倒计时组件的开发步骤。 步骤 步骤一:安装vue-cli 首先,我们需要在…

    Vue 2023年5月29日
    00
  • Vue中金额、日期格式化插件@formatjs/intl的使用及说明

    Vue中金额、日期格式化插件@formatjs/intl的使用及说明 简介 @formatjs/intl 是一个用于处理数字、日期、货币等多种格式化需求的插件。可以在 Vue 中方便地使用它来对各种格式进行处理。 安装 在项目中安装@formatjs/intl: npm install @formatjs/intl 同时,需要安装@formatjs/intl…

    Vue 2023年5月27日
    00
  • 利用Vue3实现一个可以用js调用的组件

    实现一个可通过 JS 调用的 Vue3 组件,需要以下几个步骤: 定义组件: defineComponent 注册组件: createApp().component 渲染组件: createApp().mount 下面是两个示例来说明如何实现。 示例一: 本示例将展示如何通过 JS 调用一个带有参数的组件。 1. 定义组件 import { defineCo…

    Vue 2023年5月27日
    00
  • Vue中provide、inject详解以及使用教程

    Vue中provide、inject详解以及使用教程 在Vue的组件嵌套过程中,往往需要在祖先组件中定义一些属性或变量,然后在子组件中使用。虽然可以通过props传递数据来解决问题,但是当组件嵌套层级变多时,props的传递会很繁琐。在这种情况下,Vue中的provide、inject就可以派上用场了。 provide、inject是什么? provide和…

    Vue 2023年5月27日
    00
  • 基于Vue3和element-plus实现登录功能(最终完整版)

    接下来我将为您讲解“基于Vue3和element-plus实现登录功能(最终完整版)”的完整攻略。 一、前置知识 在学习本教程前,需要掌握以下技术: Vue3基础知识 Element Plus UI框架的使用 前端基础知识,如 HTTP 等协议、Cookie 和 Session 等概念 前端路由和组件化开发思想 二、实现步骤 1. 创建vue-cli项目 使…

    Vue 2023年5月28日
    00
  • VUE.CLI4.0配置多页面入口的实现

    是的,下面我将详细讲解如何使用Vue CLI 4.0配置多页面入口。 1. 安装Vue CLI 4.0 Vue CLI 4.0是Vue官方提供的脚手架工具,可以快速创建Vue项目,并提供了很多有用的功能。首先,我们需要全局安装Vue CLI 4.0: npm install -g @vue/cli 安装完成后,可以使用下面的命令来检查是否安装成功: vue …

    Vue 2023年5月28日
    00
  • Vue如何为GET或POST请求设置请求头

    要为Vue的GET或POST请求设置请求头,需要使用Vue提供的Axios库来发送HTTP请求。Axios是一个简单易用的基于Promise的HTTP库。可以使用Axios来添加自定义请求头信息。以下是详细讲解“Vue如何为GET或POST请求设置请求头”的完整攻略。 添加全局请求头 要在所有Axios请求中添加相同的请求头,可以使用Axios提供的defa…

    Vue 2023年5月28日
    00
合作推广
合作推广
分享本页
返回顶部