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 相关文章推荐
网站页面自动跳转实现方法PHP、JSP(上)
Aug 01 Javascript
Javascript 面试题随笔
Mar 31 Javascript
调试Node.JS的辅助工具(NodeWatcher)
Jan 04 Javascript
判断输入的字符串是否是日期格式的简单方法
Jul 11 Javascript
使用 bootstrap modal遇到的问题小结
Nov 09 Javascript
微信小程序实现动态改变view标签宽度和高度的方法【附demo源码下载】
Dec 05 Javascript
node.js的http.createServer过程深入解析
Jun 06 Javascript
Vue 实现前进刷新后退不刷新的效果
Jun 14 Javascript
在Vue项目中用fullcalendar制作日程表的示例代码
Aug 04 Javascript
JS替换字符串中指定位置的字符(多种方法)
May 28 Javascript
微信小程序文章详情功能完整实例
Jun 03 Javascript
Vue基于iview table展示图片实现点击放大
Aug 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代码
2006/12/06 PHP
php5中类的学习
2008/03/28 PHP
PHP开启gzip页面压缩实例代码
2010/03/11 PHP
php中禁止单个IP与ip段访问的代码小结
2012/07/04 PHP
php mysql like 实现多关键词搜索的方法
2016/10/29 PHP
php 实现一个字符串加密解密的函数实例代码
2016/11/01 PHP
Laravel事件监听器用法实例分析
2019/03/12 PHP
laravel自定义分页的实现案例offset()和limit()
2019/10/15 PHP
Javascript与vbscript数据共享
2007/01/09 Javascript
javascript 鼠标悬浮图片显示原图 移出鼠标后原图消失(多图)
2009/12/28 Javascript
编写可维护面向对象的JavaScript代码[翻译]
2011/02/12 Javascript
深入理解JavaScript系列(16) 闭包(Closures)
2012/04/12 Javascript
JavaScript模拟可展开、拖动与关闭的聊天窗口实例
2015/05/12 Javascript
Bootstrap Table服务器分页与在线编辑应用总结
2016/08/08 Javascript
JavaScript中document.referrer的用法详解
2017/07/04 Javascript
JavaScript实现短信倒计时60s
2017/10/09 Javascript
Node.js readline模块与util模块的使用
2018/03/01 Javascript
微信小程序实现选项卡效果
2018/11/06 Javascript
Vue.js递归组件实现组织架构树和选人功能
2019/07/04 Javascript
Flutter实现仿微信底部菜单栏功能
2019/09/18 Javascript
js实现数据导出为EXCEL(支持大量数据导出)
2020/03/31 Javascript
解决Vue大括号字符换行踩的坑
2020/11/09 Javascript
python通过BF算法实现关键词匹配的方法
2015/03/13 Python
Python中字典和集合学习小结
2017/07/07 Python
解决python3捕获cx_oracle抛出的异常错误问题
2018/10/18 Python
selenium3+python3环境搭建教程图解
2018/12/07 Python
django-orm F对象的使用 按照两个字段的和,乘积排序实例
2020/05/18 Python
实习期自我鉴定
2013/10/11 职场文书
医院后勤自我鉴定
2013/10/13 职场文书
教师自荐信
2013/12/10 职场文书
省级四好少年事迹材料
2014/01/25 职场文书
维稳工作情况汇报
2014/10/27 职场文书
2014年全国法制宣传日宣传活动方案
2014/11/02 职场文书
初三数学教学反思
2016/02/17 职场文书
MySQL性能压力基准测试工具sysbench的使用简介
2021/04/21 MySQL
再谈python_tkinter弹出对话框创建
2022/03/20 Python