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 相关文章推荐
javascript 打印页面代码
Mar 24 Javascript
使用jquery 简单实现下拉菜单
Jan 14 Javascript
jQuery插件zoom实现图片全屏放大弹出层特效
Apr 15 Javascript
jQuery实现限制textarea文本框输入字符数量的方法
May 28 Javascript
jQuery学习笔记之回调函数
Aug 15 Javascript
浅谈javascript中的Function和Arguments
Aug 30 Javascript
jQuery实现三级联动效果
Mar 02 Javascript
详解Angular2学习笔记之Html属性绑定
Jan 03 Javascript
koa+mongoose实现简单增删改查接口的示例代码
May 13 Javascript
jquery弹窗时禁止body滚动条滚动的例子
Sep 21 jQuery
vue实现评论列表功能
Oct 25 Javascript
javascript浅层克隆、深度克隆对比及实例解析
Feb 09 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开发者事半功倍的十大技巧小结
2010/04/20 PHP
PHP中if和or运行效率对比
2014/12/12 PHP
php实现的数字验证码及数字运算验证码
2015/07/30 PHP
Ajax和PHP正则表达式验证表单及验证码
2016/09/24 PHP
php实现水印文字和缩略图的方法示例
2016/12/29 PHP
DOM2非标准但却支持很好的几个属性小结
2012/01/21 Javascript
使用js实现雪花飘落效果
2013/08/26 Javascript
jquery给图片添加鼠标经过时的边框效果
2013/11/12 Javascript
jQuery position() 函数详解以及jQuery中position函数的应用
2015/12/14 Javascript
js中window.open的参数及注意注意事项
2016/07/06 Javascript
ui组件之input多选下拉实现方法(带有搜索功能)
2016/07/14 Javascript
分分钟玩转Vue.js组件
2016/10/25 Javascript
原生JS获取元素集合的子元素宽度实例
2016/12/14 Javascript
javascript 中Cookie读、写与删除操作
2017/03/29 Javascript
浅谈React + Webpack 构建打包优化
2018/01/23 Javascript
JS中利用FileReader实现上传图片前本地预览功能
2018/03/02 Javascript
vue.js实现数据库的JSON数据输出渲染到html页面功能示例
2019/08/03 Javascript
Node.js API详解之 tty功能与用法实例分析
2020/04/27 Javascript
Python中使用socket发送HTTP请求数据接收不完整问题解决方法
2015/02/04 Python
解决pyinstaller打包exe文件出现命令窗口一闪而过的问题
2018/10/31 Python
python 自动轨迹绘制的实例代码
2019/07/05 Python
python图形界面开发之wxPython树控件使用方法详解
2020/02/24 Python
Luxplus丹麦:香水和个人护理折扣
2018/04/23 全球购物
美国精品地毯网站:Boutique Rugs
2020/03/04 全球购物
20岁生日感言
2014/01/13 职场文书
秋季红领巾广播稿
2014/01/27 职场文书
会计专业大学生求职信范文
2014/01/28 职场文书
接待员岗位责任制
2014/02/10 职场文书
求职信怎么写
2014/05/23 职场文书
地方白酒代理协议书
2014/10/25 职场文书
自我检讨报告
2015/01/28 职场文书
聘任证明怎么写
2015/03/02 职场文书
信仰纪录片观后感
2015/06/08 职场文书
2015年度优秀员工获奖感言
2015/07/31 职场文书
校运会广播稿
2015/08/19 职场文书
导游词之香港-太平山顶
2019/10/18 职场文书