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中匿名函数,函数直接量和闭包
May 08 Javascript
Javascript this关键字使用分析
Oct 21 Javascript
Js日期选择自动填充到输入框(界面漂亮兼容火狐)
Aug 02 Javascript
js实现ifram取父窗口URL地址的方法
Feb 09 Javascript
javaScript基础语法介绍
Feb 28 Javascript
详解jQuery选择器
Dec 21 Javascript
js学习总结之DOM2兼容处理this问题的解决方法
Jul 27 Javascript
vue.js中父组件调用子组件的内部方法示例
Oct 22 Javascript
Vue动态生成el-checkbox点击无法赋值的解决方法
Feb 21 Javascript
微信小程序解析富文本过程详解
Jul 13 Javascript
微信h5静默和非静默授权获取用户openId的方法和步骤
Jun 08 Javascript
vue-列表下详情的展开与折叠案例
Jul 28 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 SQL之where语句生成器
2009/03/24 PHP
PHP mcrypt可逆加密算法分析
2011/07/19 PHP
PHP多线程编程之管道通信实例分析
2015/03/07 PHP
JS 容错处理代码, 屏蔽错误信息
2021/03/09 Javascript
jQuery插件开发的两种方法及$.fn.extend的详解
2014/01/16 Javascript
在Javascript中处理字符串之big()方法的使用
2015/06/08 Javascript
学习JavaScript设计模式(单例模式)
2015/11/26 Javascript
JS 根据子网掩码,网关计算出所有IP地址范围示例
2020/04/23 Javascript
javascript 四十条常用技巧大全
2016/09/09 Javascript
JavaScript中定义对象原型的两种使用方法
2016/12/15 Javascript
Angular.js跨controller实现参数传递的两种方法
2017/02/20 Javascript
详解闭包解决jQuery中AJAX的外部变量问题
2017/02/22 Javascript
使用JS中的Replace()方法遇到的问题小结
2017/10/20 Javascript
JS实现的ajax和同源策略(实例讲解)
2017/12/01 Javascript
vue实现图片懒加载的方法分析
2020/02/05 Javascript
jquery实现进度条状态展示
2020/03/26 jQuery
[51:06]DOTA2-DPC中国联赛 正赛 Elephant vs Aster BO3 第二场 1月26日
2021/03/11 DOTA
python解析xml文件实例分享
2013/12/04 Python
python实现RSA加密(解密)算法
2016/02/17 Python
Python字典操作详细介绍及字典内建方法分享
2018/01/04 Python
python中int与str互转方法
2018/07/02 Python
CSS3网格的三个新特性详解
2014/04/04 HTML / CSS
璀璨的珍珠、密钉和个性化珠宝:Lily & Roo
2021/01/21 全球购物
监理员的岗位职责
2013/11/13 职场文书
英语自荐信范文
2013/12/11 职场文书
服务行业个人求职的自我评价
2013/12/12 职场文书
校园餐饮创业计划书
2014/01/10 职场文书
幼儿园母亲节活动方案
2014/03/10 职场文书
品牌转让协议书
2014/08/20 职场文书
演讲比赛的活动方案
2014/08/28 职场文书
参观邀请函范文
2015/02/02 职场文书
2015国庆节66周年演讲稿
2015/03/20 职场文书
《青山不老》教学反思
2016/02/22 职场文书
浅谈Python响应式类库RxPy
2021/06/14 Python
Anaconda安装pytorch和paddle的方法步骤
2022/04/03 Python
零基础学java之循环语句的使用
2022/04/10 Java/Android