这篇文章主要讲解了“vue中如何自定义组件传值”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“vue中如何自定义组件传值”吧!
创新互联公司专注为客户提供全方位的互联网综合服务,包含不限于网站设计、网站制作、茂南网络推广、成都微信小程序、茂南网络营销、茂南企业策划、茂南品牌公关、搜索引擎seo、人物专访、企业宣传片、企业代运营等,从售前售中售后,我们都将竭诚为您服务,您的肯定,是我们最大的嘉奖;创新互联公司为所有大学生创业者提供茂南建站搭建服务,24小时服务热线:13518219792,官方网址:www.cdcxhl.com
自定义组件传值
常规prop-event
父组件
<prop-event-value :address="address" @update="val => address = val" key="4"></prop-event-value> <script> import propEventValue from './components/prop-event-value.vue' export default { name: 'app', components: { propEventValue }, data() { return { address: '' } } } </script>
子组件
<template> <div> <p>prop-event</p> <label for="address">地址</label> <input type="text" id="address" v-model="tempAddress"> </div> </template> <script> export default { name: 'prop-event', props: ['address'], data() { return { tempAddress: this.address } }, watch: { tempAddress(newVal) { this.$emit('update', newVal) } } } </script>
需要注意:不要直接在子组件内操作父组件的内容
组件实例的作用域是孤立的。每次父组件更新时,子组件的所有 prop 都会更新为最新值。这意味着不能 (也不应该) 在子组件的模板内直接引用父组件的数据。如果你这么做了,Vue 会在控制台给出警告。
export default { name: 'prop-event', props: ['address'], watch: { address(newVal) { this.$emit('update', newVal) } } }
如将上述代码替换子组件,内容会报错!
修饰符.sync
父组件
<my-sync-value :address.sync="address" key="5"></my-sync-value> <script> import mySyncValue from './components/my-sync-value.vue' export default { name: 'app', components: { mySyncValue }, data() { return { address: '' } } } </script>
子组件
<template> <div> <p>my-sync</p> <label for="address">地址</label> <input type="text" id="address" v-model="tempAddress"> </div> </template> <script> export default { name: 'my-sync', props: ['address'], data() { return { tempAddress: this.address } }, watch: { tempAddress(newVal) { // 必须是这个update:address this.$emit('update:address', newVal) } } } </script>
prop-update:[prop]语法糖,与prop-event对比的优势:父组件无需监听事件@update="val => address = val",自动监听update:[prop]事件。
双向数据绑定v-model
所以要让组件的 v-model 生效,它应该 (从 2.2.0 起是可配置的):
接受一个 value prop
在有新的值时触发 input 事件并将新值作为参数
父组件
<my-vmodel-value v-model="address" key="6"></my-vmodel-value> <script> import myVmodelValue from './components/my-vmodel-value.vue' export default { name: 'app', components: { myVmodelValue }, data() { return { address: '' } } } </script>
子组件
<template> <div> <p>my-vmodel</p> <label for="address">姓名</label> <input type="text" id="address" v-model="tempAddress"> </div> </template> <script> export default { name: 'my-vmodel', props: ['value'], data() { return { tempAddress: this.value } }, watch: { tempAddress(newVal) { // 必须是input this.$emit('input', newVal) } } } </script>
prop-input语法糖,父组件v-model默认监听input事件
需要注意,这里必须触发input事件,当然也可以自定v-model属性值和事件,请参照自定义组件的v-model
vuex
通过store传值,这里后续单独讲述vuex。
单向数据流
上述已经提及,在子组件内部改变 prop,Vue会在控制台给出告警。但经常开发周静,我们很容易忍不住修改prop中的数据,如:
Prop 作为初始值传入后,子组件想把它当作局部数据来用;
Prop 作为原始数据传入,由子组件处理成其它数据输出。
对这两种情况,正确的应对方式是:
问题1:定义一个局部变量,并用 prop 的值初始化它:
props: ['initialCounter'], data: function () { return { counter: this.initialCounter } }
问题2:定义一个计算属性,处理 prop 的值并返回:
props: ['size'], computed: { normalizedSize: function () { return this.size.trim().toLowerCase() } }
感谢各位的阅读,以上就是“vue中如何自定义组件传值”的内容了,经过本文的学习后,相信大家对vue中如何自定义组件传值这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是创新互联,小编将为大家推送更多相关知识点的文章,欢迎关注!
网页标题:vue中如何自定义组件传值
分享地址:https://www.cdcxhl.com/article38/gooesp.html
成都网站建设公司_创新互联,为您提供面包屑导航、自适应网站、、全网营销推广、Google、网站内链
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联