在应用复杂时,推荐使用vue官网推荐的vuex,以下讨论简单SPA中的组件间传值。

一、路由传值

  路由对象如下图所示:

在跳转页面的时候,在js代码中的操作如下,在标签中使用<router-link>标签

  1. this.$router.push({
  2. name: 'routePage',
  3. query/params: {
  4. routeParams: params
  5. }
  6. })

 需要注意的是,实用params去传值的时候,在页面刷新时,参数会消失,用query则不会有这个问题。

 这样使用起来很方便,但url会变得很长,而且如果不是使用路由跳转的界面无法使用。取值方式分别为:this.$route.params.paramName和this.$route.query.paramName

   注:使用params传值,也可以做到页面刷新,参数不丢失,在命名路由时这样设置:

  1. {
  2. path: '/OrderDetail/:orderId/:type',
  3. name: 'OrderDetail',
  4. component: OrderDetail,
  5. meta: {
  6. title: '订单详情',
  7. needAuth: true
  8. }
  9. }

使用时:

  1. this.$router.push({name: 'OrderDetail', params: {orderId: id, type: 'buy'}})

这种方式会把路由导航到 /OrderDetail/22aead11a99c4c91aa2169ac17d0ddb5/booking 路径

参考:http://router.vuejs.org/zh-cn/essentials/named-routes.html

二、通过$parent,$chlidren等方法调取用层级关系的组件内的数据和方法

  通过下面的方法调用:

  1. this.$parent.$data.id //获取父元素data中的id
  2. this.$children.$data.id //获取父元素data中的id

这样用起来比较灵活,但是容易造成代码耦合性太强,导致维护困难

三、采用eventBus.js传值---兄弟组件间的传值

eventBus.js

  1. import Vue from 'Vue'
  2.  
  3. export default new Vue()

App.vue

  1. <template>
  2. <div id="app">
  3. <secondChild></secondChild>
  4. <firstChild></firstChild>
  5. </div>
  6. </template>
  7.  
  8. <script>
  9. import FirstChild from './components/FirstChild'
  10. import SecondChild from './components/SecondChild'
  11.  
  12. export default {
  13. name: 'app',
  14. components: {
  15. FirstChild,
  16. SecondChild,
  17. }
  18. }
  19. </script>

FirstChild.vue

  1. <template>
  2. <div class="firstChild">
  3. <input type="text" placeholder="请输入文字" v-model="message">
  4. <button @click="showMessage">向组件传值</button>
  5. <br>
  6. <span>{{message}}</span>
  7. </div>
  8. </template>
  9. <script>
  10. import bus from '../assets/eventBus';
  11. export default{
  12. name: 'firstChild',
  13. data () {
  14. return {
  15. message: '你好'
  16. }
  17. },
  18. methods: {
  19. showMessage () {
  20. alert(this.message)
  21. bus.$emit('userDefinedEvent', this.message);//传值
  22. }
  23. }
  24. }
  25. </script>

SecondChild.vue

  1. <template>
  2. <div id="SecondChild">
  3. <h1>{{message}}</h1>
  4. </div>
  5. </template>
  6. <script>
  7. import bus from '../assets/eventBus';
  8. export default{
  9. name:'SecondChild',
  10. data(){
  11. return {
  12. message: ''
  13. }
  14. },
  15. mounted(){
  16. var self = this;
  17. bus.$on('userDefinedEvent',function(message){
  18. self.message = message;//接值
  19. });
  20. }
  21. }

四、通过localStorage或者sessionStorage来存储数据(参考:https://blog.csdn.net/qq_32786873/article/details/70853819)

setItem存储value
用途:将value存储到key字段
用法:.setItem( key, value)
代码示例:

  1. sessionStorage.setItem("key", "value"); localStorage.setItem("site", "js8.in");

getItem获取value
用途:获取指定key本地存储的值
用法:.getItem(key)
代码示例:

  1. var value = sessionStorage.getItem("key"); var site = localStorage.getItem("site");

vue中组件传值方式汇总的更多相关文章

  1. day 84 Vue学习六之axios、vuex、脚手架中组件传值

    Vue学习六之axios.vuex.脚手架中组件传值   本节目录 一 axios的使用 二 vuex的使用 三 组件传值 四 xxx 五 xxx 六 xxx 七 xxx 八 xxx 一 axios的 ...

  2. Vue中组件间通信的方式

    Vue中组件间通信的方式 Vue中组件间通信包括父子组件.兄弟组件.隔代组件之间通信. props $emit 这种组件通信的方式是我们运用的非常多的一种,props以单向数据流的形式可以很好的完成父 ...

  3. vue 父子组件传值以及方法调用,平行组件之间传值以及方法调用大全

    vue项目经常需要组件间的传值以及方法调用,具体场景就不说了,都知道.基本上所有的传值都可以用vuex状态管理来实现,只要在组件内监听vuex就好. vue常用的传值方式以及方法有: 1. 父值传子( ...

  4. Vue 创建组件的方式

    Vue 创建组件的方式 2018年08月07日 11:10:56 虔诚带着决然 阅读数:1015   版权声明:本文为博主原创文章,未经博主允许不得用做其他商业活动. https://blog.csd ...

  5. vue父子组件传值加例子

    例子:http://element-cn.eleme.io/#/zh-CN/component/form         上进行改的 父传子:用prop:子组件能够改变父组件的值,是共享的,和父操作是 ...

  6. Asp.net页面间传值方式汇总

    七种传值方式,分别是:URL传值,Session传值,Cookie传值,Server.Transfer传值,Application传值,利用某些控件的PostBackUrl属性和使用@Previous ...

  7. vue中组件之间的通信

    一.vue中组件通信的种类 父组件向子组件的通信 子组件向父组件的通信 隔代组件之间的通信 兄弟 组件 之间的通信 二.实现通信的方式  props vue自定义的事件 消息订阅与发布 vuex sl ...

  8. Vue中组件

    0828自我总结 Vue中组件 一.组件的构成 组件:由 template + css + js 三部分组成(.vue文件) 1)组件具有复用性 2) 复用组件时,数据要隔离 3) 复用组件时,方法不 ...

  9. 关于Vue父子组件传值(复杂数据类型的值)的细节点

    vue 父子组件传值是很常见的,多数情况下都是父传递给子的值是基础数据类型,如string,number,boolean, 当父组件值被修改时,子组件能够实时的作出改变. 如果父子传值的类型是复杂数据 ...

随机推荐

  1. ROS Learning-011 beginner_Tutorials (编程) 编写 ROS 话题版的 Hello World 程序(Python版)

    ROS Indigo beginner_Tutorials-10 编写 ROS 话题版的 Hello World 程序(Python版) 我使用的虚拟机软件:VMware Workstation 11 ...

  2. Entity Framework Tutorial Basics(11):Code First

    Code First development with Entity Framework: Entity Framework supports three different development ...

  3. deb包制作(转)

    deb 包已被广泛应用但是也在不断的更新,这里介绍Ubuntu deb包安装设置使用,帮助大家安装更新Ubuntu deb包系统.制作Ubuntu deb包的三种方法 | Sean's Blog [转 ...

  4. mysql--约束条件

    主键的测试  PRIMARY KEY(PRIMARY可以省略) --查看创建表的标的定义,可以查看主键 SHOW CREATE TABLE user1; ,'king');--主键不能重复 ,'kin ...

  5. C++笔记--异常

    引言 异常,让一个函数可以在发现自己无法处理的错误时抛出一个异常,希望它的调用者可以直接或者间接处理这个问题.而传统错误处理技术,检查到一个局部无法处理的问题时: 1.终止程序(例如atol,atoi ...

  6. C# winForm 开机自动启动 并启动后最小化到任务栏 右侧通知栏并交互操作

    //设置自动启动 string path = Application.StartupPath; SettingHel.SetAutoRun(path +@"\MostImpressive.D ...

  7. C#去边框以及无边框窗体移动

    1.去边框  : 1) 选中要去除边框的窗体,按F4调出窗体属性. 2)在属性框中找到FormBorderStyle选择none. 2.去掉边框后实现对窗口程序的拖动 1)双击窗体,进入程序设计界面 ...

  8. C# GDI

    绘制实心矩形 using (Graphics gp = Graphics.FromImage(bmBlank)) { //... ; Rectangle rec = , y, , );//画一个白块, ...

  9. 将Winform程序及dll打包成可执行的exe

    使用场景 通常开发的Winform程序,引用了其他类库后,在输出目录下都会产生很多DLL文件,exe执行时必须依赖这些DLL.想要Winform程序只有一个可执行exe文件,又不想打包成安装包,就可以 ...

  10. Android按钮单击事件处理的几种方法(Android学习笔记)

    方法一:匿名内部类实现按钮事件处理 this.btnButton=(Button)super.findViewById(R.id.mybtn); this.btnButton.setOnClickLi ...