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 相关文章推荐
jQuery .attr()和.removeAttr()方法操作元素属性示例
Jul 16 Javascript
JS遍历Json字符串中键值对先转成JSON对象再遍历
Aug 15 Javascript
jquery中页面Ajax方法$.load的功能使用介绍
Oct 20 Javascript
js的toLowerCase方法用法实例
Jan 27 Javascript
javascript弹性运动效果简单实现方法
Jan 08 Javascript
老生常谈JavaScript 正则表达式语法
Aug 20 Javascript
使用grunt合并压缩js和css文件的方法
Mar 02 Javascript
js实现简单选项卡功能
Mar 23 Javascript
vue实现鼠标移过出现下拉二级菜单功能
Dec 12 Javascript
Vue中点击active并第一个默认选中功能的实现
Feb 24 Javascript
js中!和!!的区别与用法
May 09 Javascript
前端如何实现动画过渡效果
Feb 05 Javascript
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+mysql留言本源码
2009/11/11 PHP
PHP中imagick函数的中文解释
2015/01/21 PHP
Laravel框架实现的上传图片到七牛功能详解
2019/09/06 PHP
jQuery select操作控制方法小结
2010/05/26 Javascript
单独使用CKFinder选择图片的方法
2010/08/21 Javascript
Js操作Select大全(取值、设置选中等等)
2013/10/29 Javascript
Tab切换组件(选项卡功能)实例代码
2013/11/21 Javascript
Node.js 服务器端应用开发框架 -- Hapi.js
2014/07/29 Javascript
有关json_decode乱码及NULL的问题
2015/10/13 Javascript
jQuery插件制作的实例教程
2016/05/16 Javascript
JavaScript中的数组遍历forEach()与map()方法以及兼容写法介绍
2016/05/19 Javascript
jquery实现静态搜索功能(可输入搜索文字)
2017/03/28 jQuery
Angular2入门教程之模块和组件详解
2017/05/28 Javascript
Webpack性能优化 DLL 用法详解
2017/08/10 Javascript
详解如何在vue-cli中使用vuex
2018/08/07 Javascript
微信小程序实现获取准确的腾讯定位地址功能示例
2019/03/27 Javascript
Openlayers实现图形绘制
2020/09/28 Javascript
[55:02]2014 DOTA2国际邀请赛中国区预选赛 HGT VS Orenda
2014/05/21 DOTA
[00:12]DAC2018 Miracle-站上中单舞台,他能否再写奇迹?
2018/04/06 DOTA
Python中使用MELIAE分析程序内存占用实例
2015/02/18 Python
详解Python中的变量及其命名和打印
2016/03/11 Python
python 开发的三种运行模式详细介绍
2017/01/18 Python
Python 最大概率法进行汉语切分的方法
2018/12/14 Python
python利用tkinter实现屏保
2019/07/30 Python
Python json读写方式和字典相互转化
2020/04/18 Python
让Django的BooleanField支持字符串形式的输入方式
2020/05/20 Python
耐克中国官方商城:Nike中国
2018/10/18 全球购物
linux面试题参考答案(3)
2012/09/13 面试题
土木工程毕业生自荐信
2013/11/12 职场文书
渔夫的故事教学反思
2014/02/14 职场文书
护士节演讲稿开场白
2014/08/25 职场文书
12.4法制宣传日标语
2014/10/08 职场文书
大学生求职信怎么写
2015/03/19 职场文书
golang 实现Location跳转方式
2021/05/02 Golang
PyQt5爬取12306车票信息程序的实现
2021/05/14 Python
ubuntu下常用apt命令介绍
2022/06/05 Servers