vue 中几种传值方法(3种)


Posted in Javascript onNovember 12, 2019

前言

vue项目中,组件跟组件之间数据的传递是很普遍的行为,在这里总结几种常见的vue组件跟组件之间传值方式,其中,主要有父子组件,非父子组件传值。

父组件向子组件传值

方法:父组件内设置要传的数据,在父组件中引用的子组件上绑定一个自定义属性并把数据绑定在自定义属性上,在子组件添加参数props接收即可。具体可参考官方文档。

父组件传递参数代码如下:

<template>
<center-template :form='userinfo'></center-template>
</template>
<script>
import CenterTemplate from '../../components/admin/userCenterTemplate'
export default {
 components: {
  'center-template': CenterTemplate
 },
 data () {
  return {
   userinfo: {name: 'jack'}
  }
 }, 
}
</script>

上面代码,通过在子组件上面绑定动态参数:form='userinfo'将父组件中的参数传递给子组件,子组件就可以通过props来进行接收。

子组件接收参数代码如下:

...
export default {
  props: {
  // 接收
    form: { userinfo: Object }
    }
  },
}

// 另一种写法
export default {
  props: {
  // 接收
    form: ['userinfo']
    }
  },
}

上面代码中,还可以使用数组来接受参数,但是不能指定参数的类型。

子组件向父组件传值

方法:子组件通过vue实例方法$emit进行触发并且可以携带参数,父组件监听使用@(v-on)进行监听,然后进行方法处理。

子组件向上传值

<template>
  <ul class="letter_city">
    <li @click="selectItem('子组件向父组件传值')">
    </li>
   </ul>
</template>
<script>
export default {
   methods: {
    selectItem(value) {
      this.$emit('selectItems', value)
    }
  }
}
</script>

上面代码中,this指代的是vue实例,子组件通过$emit向父组件触发事件和传递参数。

父组件监听子组件传来的值

<template>
  <city-pages @selectItem='selectItem'></city-pages>
</template>
<script>
import cityPages from './cityPages'
export default {
  components: {
    cityPages
  },
  methods: {
    selectItem(value) {
      console.log(value) // 子组件向父组件传值
    }
  }
}
</script>

上面代码中,在子组件中监听方法,如果子组件触发方法,父子间这边就可以得到子组件传过来的参数了。

非父子组件传值一

Event BUS总线方法:通过新建一个vue实例,来实现$on接收和$emit 来触发事件

1、新建bus.js文件:

// common/bus.js

import Vue from 'vue';

// 使用 Event Bus
const bus = new Vue();

export default bus;

2、组件1(接收通知信息)

import bus from '@/common/bus.js'

export default{
  data(){
    return {
        collapseData: ''   
    }
  },
  created() {
    // 监听collapse,有变动就会收到通知,并改变collapseData值
    bus.$on('collapse', msg => {
      this.collapseData = msg
    })
  }
}

3、组件2(发布信息)

import bus from '@/common/bus.js'

export default {
  methods: {
    sendData(){
      // 发布信号,触发这个函数,其他的接收函数都会收到相应的信息
      bus.$emit('collapse', '信息')
    }
  }
}

非父子组件传值二

借组vux插件实现组件之间的传值。

1、通过npm加载vuex,创建store.js文件,然后在main.js中引入,store.js文件代码如下:

import Vue from 'vue'
 import Vuex from 'vuex'
 Vue.use(Vuex);
 const state = {
  message:'Hello World'
 };
 const mutations = {
  newMessage(state,msg){
   state.message = msg
  }
 }
 export default new Vuex.Store({
  state,
  mutations
 })

3、在组件中存vuex的值,一般如下:

state里面的值只能通过Action来提交来修改和赋值。

<template>
 <div>
 <input type="text" @blur=saveName(username) v-model="username">
 </div>
</template>
 
<script type="text/javascript">
 // 引入mapActions,很重要
 import { mapActions } from 'vuex'
 export default {
 data() {
 return {
 username:'',
 password: ''
 }
 },
 methods: {
 ...mapActions({
 // 在input 的blur 事件中触发回调,并将输入值作为参数返回到store中
 saveName: 'saveName'
 })
 }
 }
</script>

3、在组件中获取Vuex的值,一般如下:

<template>
  <div id="list">
    {{_name}}
  </div>
</template>

<script>
import {mapState} from 'vuex'
export default {
  name: 'List',
  data() { return{} },
  computed: {
    // 1普通写法
    // name() { return this.$store.state.name }
    // 2简洁写法
    //...mapState(['name']) 
    // 3重命名
    ...mapState({_name: "name"})
  }
</script>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
两个DIV等高的JS的实现代码
Dec 23 Javascript
JQuery 弹出框定位实现方法
Dec 02 Javascript
jQuery中prev()方法用法实例
Jan 08 Javascript
jQuery.Uploadify插件实现带进度条的批量上传功能
Jun 08 Javascript
再次谈论Javascript中的this
Jun 23 Javascript
JS中事件冒泡和事件捕获介绍
Dec 13 Javascript
JScript实现地址选择功能
Aug 15 Javascript
Easy UI动态树点击文字实现展开关闭功能
Sep 30 Javascript
vue使用axios实现文件上传进度的实时更新详解
Dec 20 Javascript
Js和VUE实现跑马灯效果
May 25 Javascript
如何在微信小程序中使用骨架屏的步骤
Jun 12 Javascript
SpringBoot+Vue 前后端合并部署的配置方法
Dec 30 Vue.js
Vue 中 a标签上href无法跳转的解决方式
Nov 12 #Javascript
javascript严格模式详解(含严格模式与非严格模式的区别)
Nov 12 #Javascript
vue.js 实现a标签href里添加参数
Nov 12 #Javascript
VUEX 数据持久化,刷新后重新获取的例子
Nov 12 #Javascript
react-native聊天室|RN版聊天App仿微信实例|RN仿微信界面
Nov 12 #Javascript
实现vuex与组件data之间的数据同步更新方式
Nov 12 #Javascript
uni-app自定义导航栏按钮|uniapp仿微信顶部导航条功能
Nov 12 #Javascript
You might like
PHP初学者常见问题集合 修正版(21问答)
2010/03/23 PHP
用JavaScript 处理 URL 的两个函数代码
2007/08/13 Javascript
js 函数的执行环境和作用域链的深入解析
2009/11/01 Javascript
jQuery 美元符冲突的解决方法
2010/03/28 Javascript
dojo随手记 gird组件引用
2011/02/24 Javascript
说明你的Javascript技术很烂的五个原因
2011/04/26 Javascript
js 关于=+与+=日期函数使用说明(赋值运算符)
2011/11/15 Javascript
jQuery.getScript加载同域JS的代码
2012/02/13 Javascript
js获取判断上传文件后缀名的示例代码
2014/02/19 Javascript
jQuery焦点控制图层展示延迟隐藏的方法
2015/03/09 Javascript
jquery+css实现的红色线条横向二级菜单效果
2015/08/22 Javascript
js淡入淡出焦点图幻灯片效果代码分享
2015/09/08 Javascript
JavaScript实现仿新浪微博大厅和腾讯微博首页滚动特效源码
2015/09/15 Javascript
使用jQuery.Qrcode插件在客户端动态生成二维码并添加自定义Logo
2016/09/01 Javascript
vue2项目使用sass的示例代码
2017/06/28 Javascript
在Vue.js中使用Mixins的方法
2017/09/12 Javascript
详解vue-meta如何让你更优雅的管理头部标签
2018/01/18 Javascript
基于Vue 实现一个中规中矩loading组件
2019/04/03 Javascript
利用JS响应式修改vue实现页面的input值
2019/09/02 Javascript
微信公众号中的JSSDK接入及invalid signature等常见错误问题分析(全面解析)
2020/04/11 Javascript
angular共享依赖的解决方案分享
2020/10/15 Javascript
Python Mysql数据库操作 Perl操作Mysql数据库
2009/01/12 Python
Python从零开始创建区块链
2018/03/06 Python
PyTorch实现ResNet50、ResNet101和ResNet152示例
2020/01/14 Python
Python如何安装第三方模块
2020/05/28 Python
python从ftp获取文件并下载到本地
2020/12/05 Python
python 数据类型强制转换的总结
2021/01/25 Python
CSS3 不定高宽垂直水平居中的几种方式
2020/03/26 HTML / CSS
浅析HTML5 meta viewport参数
2020/10/28 HTML / CSS
英国儿童设计师服装和玩具购物网站:Zac & Lulu
2020/10/19 全球购物
关于Assembly命名空间的三个面试题
2015/07/23 面试题
物业管理求职自荐信
2013/09/25 职场文书
手机促销活动方案
2014/02/05 职场文书
小学安全工作总结2015
2015/05/18 职场文书
新闻通讯稿模板
2015/07/22 职场文书
Spring Boot配合PageHelper优化大表查询数据分页
2022/04/20 Java/Android