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 17 Javascript
给应用部分的js代码设定一个统一的入口
Jun 15 Javascript
JavaScript中Boolean对象的属性解析
Oct 21 Javascript
javascript生成img标签的3种实现方法(对象、方法、html)
Dec 25 Javascript
Node.js测试中的Mock文件系统详解
Nov 21 Javascript
JS实现滑动门效果的方法详解
Dec 19 Javascript
Angular2监听页面大小变化的解决方法
Oct 09 Javascript
详解使用mpvue开发github小程序总结
Jul 25 Javascript
Promise.all中对于reject的处理方法
Aug 01 Javascript
vue.js实现带日期星期的数字时钟功能示例
Aug 28 Javascript
three.js实现炫酷的全景3D重力感应
Dec 30 Javascript
Vue 实现CLI 3.0 + momentjs + lodash打包时优化
Nov 13 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内核介绍及扩展开发指南―基础知识
2011/09/11 PHP
for循环连续求和、九九乘法表代码
2012/02/20 PHP
PHP编码转换函数 自动转换字符集支持数组转换
2012/12/16 PHP
很棒的学习jQuery的12个网站推荐
2011/04/28 Javascript
jquery 追加tr和删除tr示例代码
2013/09/12 Javascript
JS清空多文本框、文本域示例代码
2014/02/24 Javascript
Chrome下ifame父窗口调用子窗口的问题示例探讨
2014/03/17 Javascript
通过url查找a元素应用案例
2014/04/29 Javascript
20个实用的JavaScript技巧分享
2014/11/28 Javascript
node.js中的fs.lchown方法使用说明
2014/12/16 Javascript
jQuery插件Elastislide实现响应式的焦点图无缝滚动切换特效
2015/04/12 Javascript
js比较日期大小的方法
2015/05/12 Javascript
jQuery四种选择器使用及示例
2016/06/05 Javascript
jQuery实用密码强度检测
2017/03/02 Javascript
从零开始学习Node.js系列教程之基于connect和express框架的多页面实现数学运算示例
2017/04/13 Javascript
详解webpack 如何集成第三方js库
2017/06/29 Javascript
Vue的百度地图插件尝试使用
2017/09/06 Javascript
AngularJS实现表单元素值绑定操作示例
2017/10/11 Javascript
ES6之模版字符串的具体使用
2018/05/17 Javascript
使用webpack编译es6代码的方法步骤
2019/04/28 Javascript
layui表格设计以及数据初始化详解
2019/10/26 Javascript
vue动态循环出的多个select出现过的变为disabled(实例代码)
2019/11/10 Javascript
小程序实现录音上传功能
2019/11/22 Javascript
node.js express捕获全局异常的三种方法实例分析
2019/12/27 Javascript
node.js使用net模块创建服务器和客户端示例【基于TCP协议】
2020/02/14 Javascript
Vue项目接入Paypal实现示例详解
2020/06/04 Javascript
详解Python的Django框架中的templates设置
2015/05/11 Python
django实现用户登陆功能详解
2017/12/11 Python
美国特价机票专家:Airfarewatchdog
2018/01/24 全球购物
Pottery Barn阿联酋:购买家具、家居装饰及更多
2019/12/08 全球购物
咖啡店创业计划书范文
2014/09/15 职场文书
安全责任书
2015/01/29 职场文书
教师节座谈会主持词
2015/07/03 职场文书
2019年描写人生经典诗句大全
2019/07/08 职场文书
python字典的元素访问实例详解
2021/07/21 Python
浅谈Java父子类加载顺序
2021/08/04 Java/Android