vue组件如何传值


这篇文章主要介绍“vue组件如何传值”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“vue组件如何传值”文章能帮助大家解决问题。 传值方法:1、利用props实现父传子;2、子传父,需要自定义事件,在子组件中用“this.$emit(‘事件名’)”触发,而父中用“@事件名”监听;3、兄弟间,通过公有父元素作为桥接,结合父子props传参、子父自定义事件;4、用路由传值;5、用$ref传值;6、用依赖注入传给后代子孙曾孙;7、利用$attrs;8、借助$listeners中间事件;9、用$parent传等。vue组件传值的10种方式,常用的也有五六种,先上一张总结图:
在子组件里定义一个props,即props:[‘msg’],msg可以是对象也可以是基本数据类型如果你想定义一个默认值,即 props:{msg: {type: String, default: ‘hello world’}},
默认值是对象类型:props: { msg: { type: Object, default: () => { return { name: ‘dan_seek’ } } }}需要注意的是这种传值是单向的,你无法改变父组件的值(当然引用类型例外);而且如果直接修改props的值会报一个警告。推荐的写法是在data()里重新定义一个变量(见Children.vue),并把props赋值给它,当然计算属性也行。Children.vue

Parent.vue

这里需要使用自定义事件,在子组件中使用this.$emit(‘myEvent’) 触发,然后在父组件中使用@myEvent监听Children.vue

Parent.vue

运用自定义事件emit的触发和监听能力,定义一个公共的事件总线eventBus,通过它作为中间桥梁,我们就可以传值给任意组件了。而且通过eventBus的使用,可以加深emit的理解。EventBus.js

importVuefrom'vue'
exportdefaultnewVue()

Children1.vue

Children2.vue

Parent.vue

github上还有一个开源vue-bus库,可以参考下: https://github.com/yangmingshan/vue-bus#readmei.使用问号传值A页面跳转B页面时使用 this.$router.push(‘/B?name=danseek’)B页面可以使用 this.$route.query.name 来获取A页面传过来的值上面要注意router和route的区别ii.使用冒号传值配置如下路由:

{
path:'/b/:name',
name:'b',
component:()=>import('../views/B.vue')
},

在B页面可以通过 this.$route.params.name 来获取路由传入的name的值iii.使用父子组件传值由于router-view本身也是一个组件,所以我们也可以使用父子组件传值方式传值,然后在对应的子页面里加上props,因为type更新后没有刷新路由,所以不能直接在子页面的mounted钩子里直接获取最新type的值,而要使用watch。

//子页面
......
props:['type']
......
watch:{
type(){
//console.log("在这个方法可以时刻获取最新的数据:type=",this.type)
},
},

通过$ref的能力,给子组件定义一个ID,父组件通过这个ID可以直接访问子组件里面的方法和属性首先定义一个子组件Children.vue

然后在父组件Parent.vue中引用Children.vue,并定义ref属性

假设父组件有一个方法 getName(),需要把它提供给所有的后代

provide:function(){
return{
getName:this.getName()
}
}

provide 选项允许我们指定我们想要提供给后代组件的数据/方法然后在任何后代组件里,我们都可以使用 inject 来给当前实例注入父组件的数据/方法:

inject:['getName']

Parent.vue

Children.vue

正常情况下需要借助父亲的props作为中间过渡,但是这样在父亲组件就会多了一些跟父组件业务无关的属性,耦合度高,借助$attrs可以简化些,而且祖跟孙都无需做修改GrandParent.vue

Parent.vue

父组件收到祖父的名字:{{name}}Children.vue

子组件收到祖父的名字:{{name}}祖父的性别:{{sex}}祖父的年龄:{{age}}祖父的爱好:{{hobby}}

父组件收到
祖父的名字:grandParent
子组件收到
祖父的名字:
祖父的性别:男
祖父的年龄:88
祖父的爱好:code

借助$listeners中间事件,孙可以方便的通知祖,代码示例见7通过parent可以获父组件实例,然后通过这个实例就可以访问父组件的属性和方法,它还有一个兄弟root,可以获取根组件实例。语法:

//获父组件的数据
this.$parent.foo

//写入父组件的数据
this.$parent.foo=2

//访问父组件的计算属性
this.$parent.bar

//调用父组件的方法
this.$parent.baz()

于是,在子组件传给父组件例子中,可以使用this.$parent.getNum(100)传值给父组件。sessionStorage 是浏览器的全局对象,存在它里面的数据会在页面关闭时清除 。运用这个特性,我们可以在所有页面共享一份数据。语法:

//保存数据到sessionStorage
sessionStorage.setItem('key','value');

//从sessionStorage获取数据
letdata=sessionStorage.getItem('key');

//从sessionStorage删除保存的数据
sessionStorage.removeItem('key');

//从sessionStorage删除所有保存的数据
sessionStorage.clear();

注意:里面存的是键值对,只能是字符串类型,如果要存对象的话,需要使用 let objStr = JSON.stringify(obj) 转成字符串然后再存储(使用的时候 let obj = JSON.parse(objStr) 解析为对象)。这样存对象是不是很麻烦呢,推荐一个库 good-storage ,它封装了sessionStorage ,可以直接用它的API存对象

//localStorage
storage.set(key,val)
storage.get(key,def)

//sessionStorage
storage.session.set(key,val)
storage.session.get(key,val)

关于“vue组件如何传值”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注百云主机行业资讯频道,小编每天都会为大家更新不同的知识点。

相关推荐: Vue怎么取得后台原生HTML字符串原样显示

这篇文章主要介绍“Vue怎么取得后台原生HTML字符串原样显示”,在日常操作中,相信很多人在Vue怎么取得后台原生HTML字符串原样显示问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Vue怎么取得后台原生HTML字符串原样显示”…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

Like (0)
Donate 微信扫一扫 微信扫一扫
Previous 03/06 17:59
Next 03/06 17:59

相关推荐