当前位置: 首页 > news >正文

网站开发资源四川成都设计院

网站开发资源,四川成都设计院,wordpress 文章页,商城网站建设流程Vue3父子组件传属性和方法调用Demo 说明目录父组件给子组件传值和方法 父组件给子组件传值-使用defineProps接受父组件属性值父组件给子组件传值-使用defineModel接受父组件v-model值 当子组件只需要接收父组件一个v-model值时,写法1如下:子组件接收单个v-model写法2如下:当子…Vue3父子组件传属性和方法调用Demo 说明目录父组件给子组件传值和方法 父组件给子组件传值-使用defineProps接受父组件属性值父组件给子组件传值-使用defineModel接受父组件v-model值 当子组件只需要接收父组件一个v-model值时,写法1如下:子组件接收单个v-model写法2如下:当子组件需要接收父组件多个v-model值时,写法如下: 父组件给子组件传方法 子组件调用父组件方法-使用defineEmits调用父组件方法子组件暴露属性和方法给父组件调用-使用defineExpose暴露子组件属性和方法 说明 这里记录下自己学习Vue3父子组件怎么传值和方法怎么互相调用防止后面继续踩坑且方便以后直接使用。这里承接自己的博客Vue3vite优化基础架构3— 优化vue-i18n国际化配置这篇博客在该博客项目的基础上学习Vue3父子组件传值及使用。 官方文档https://cn.vuejs.org/api/sfc-script-setup.html#defineprops-defineemits 目录 这里父组件是test-management1文件夹下的index.vue子组件是test-management1文件夹下的components文件夹的test-child.vue。 父组件给子组件传值和方法 父组件给子组件传属性值有2种方式 第一种方式是在子组件里面使用defineProps来接受父组件那边传过来的属性值。第二种方式是在子组件里面使用defineModel来接受父组件那边传过来的v-model值。 父组件给子组件传值-使用defineProps接受父组件属性值 父组件代码如下: templatediv测试管理1页面/divdiv!--在父组件里面使用子组件TestChild--!--父组件向子组件传参,参数为name,age,isOpenEmail,content,score这5个--TestChild:nametestName:agetestAge:isOpenEmailtestIsOpenEmail:contenttestContent:scoretestScore//div /templatescript setup nametest-management1import {ref} from vue//引入子组件import TestChild from ./components/test-child.vue//定义name值const testNameref(张三)//定义age值const testAgeref(18)//定义isOpenEmail开通邮箱值const testIsOpenEmailref(false)//定义content值const testContentref([测试值1,测试值2,测试值3])//定义score值const testScoreref({curriculum:语文,score:60}) /scriptstyle scoped/style子组件代码如下: template!--显示父组件传过来的参数值--div!--在页面模版里面如果要使用父组件里面穿过来的参数有2种写法都能在页面显示出来--!--第一种全写:{{props.name}}--divname名字为:{{props.name}}/div!--第二种简写:{{name}},这种简写有个问题,如果你在js中定义了一个相同名的参数,它会优先读取定义的那个参数,不会去读父组件传过来的参数--divname名字为:{{name}}/divdivage年龄为:{{props.age}}/divdivisOpenEmail是否开通邮箱为:{{props.isOpenEmail}}/divdivcontent内容为:{{props.content[0]}}/divdivscore分数为:{{props.score.score}}/div/div /templatescript setupimport {onMounted} from vue//const namehaha//页面初始化时执行onMounted(() {console.info(从父组件那边传过来的值为:)console.info(name:,props.name)console.info(age:,props.age)console.info(isOpenEmail:,props.isOpenEmail)console.info(content:,props.content)console.info(score:,props.score)})//使用defineProps接收父组件穿传过来的参数const props defineProps({//从父组件那边接收一个String类型的参数,参数名叫name(名字)name: {required:false,//是否必须传该name参数,不写默认为false,true为必须传该参数,false为可以不传该name参数type: String,//参数类型为String字符串default: //默认值为空值},//从父组件那边接收一个Number类型的参数,参数名叫age(年龄)age: {type: Number,//参数类型为Number整型default: 0//默认值为0},//从父组件那边接收一个Boolean类型的参数,参数名叫isOpenEmail(是否开通邮箱)isOpenEmail: {type: Boolean,//参数类型为Boolean布尔类型default: false//默认值为false},//从父组件那边接收一个content类型的参数,参数名叫content(内容)content: {type: Array,//参数类型为Array数组类型default: []//默认值为空数组},//从父组件那边接收一个Object类型的参数,参数名叫score(分数)score: {type: Object,//参数类型为Object对象类型default: {}//默认值为空对象}}) /scriptstyle scoped/style谷歌浏览器效果显示 注意事项 1.在页面模版中如果直接使用简写{{name}}这种写法如果在js中又重新定义了一个name属性,那么会优先使用定义的这个name值不会使用父组件那边传值过来的name属性值。如下: 2.如果子组件接收的参数有required属性而且为true如果父组件不传该属性的话那么控制台会出现警告。如下: 浏览器结果如下: 父组件给子组件传值-使用defineModel接受父组件v-model值 当子组件只需要接收父组件一个v-model值时,写法1如下: 父组件代码: templatediv测试管理1页面/divdiv!--在父组件里面使用子组件TestChild--!--父组件向子组件传参,使用v-model形式进行双向绑定--TestChildv-modeltestName//div /templatescript setup nametest-management1import {ref} from vue//引入子组件import TestChild from ./components/test-child.vue//定义name值const testNameref(张三)/scriptstyle scoped/style子组件代码: template!--显示父组件传过来的参数值--divel-input v-modelmodelValue/el-input/div /templatescript setupimport {onMounted} from vue//页面初始化时执行onMounted(() {})//直接使用解构写法来接收父组件那边通过v-model传过来的值,必须使用modelValue来接收属性值const [modelValue]defineModel()console.info(子组件接收父组件的name值为:,modelValue.value) /scriptstyle scoped/style谷歌浏览器结果如下: 子组件接收单个v-model写法2如下: template!--显示父组件传过来的参数值--divel-input v-modelname/el-input/div /templatescript setupimport {onMounted} from vue//页面初始化时执行onMounted(() {console.info(子组件接收父组件的v-model值为:,name.value)})//直接使用defineModel接受父组件通过v-model传过来的值//子组件这边定义一个name属性来接收父组件那边传过来的v-model的值,简写形式如下const namedefineModel()//完整写法/*const name defineModel({type: String,//字段类型default: //默认空值})*///等同于上面的default: 写法/*const name defineModel({type: String,//字段类型default: () {//扩展:将默认属性作为一个方法使用,可以执行一段自定义逻辑,这里直接返回了一个空值,等同于上面写法return }})*//scriptstyle scoped/style浏览器结果如下: 当子组件需要接收父组件多个v-model值时,写法如下: 父组件代码: templatediv测试管理1页面/divdiv!--在父组件里面使用子组件TestChild--!--父组件向子组件传参,使用v-model形式进行双向绑定--!--绑定多个v-model时,v-model冒号后面为参数名称,后面为参数值--!--向子组件传参属性为testName,testAge,testIsOpenEmail,testContent,testScore这5个参数--TestChildv-model:testNamenamev-model:testAgeagev-model:testIsOpenEmailisOpenEmailv-model:testContentcontentv-model:testScorescore//div /templatescript setup nametest-management1import {ref} from vue//引入子组件import TestChild from ./components/test-child.vue//定义name值const nameref(张三)//定义age值const ageref(18)//定义isOpenEmail开通邮箱值const isOpenEmailref(false)//定义content值const contentref([测试值1,测试值2,测试值3])//定义score值const scoreref({curriculum:语文,score:60})/scriptstyle scoped/style子组件代码: template!--显示父组件传过来的参数值--div!--使用父组件那边传过来的name值--el-input v-modelname/el-input/div /templatescript setupimport {onMounted} from vue//页面初始化时执行onMounted(() {console.info(子组件接收父组件的v-model值为:)console.info(name:,name.value)console.info(age:,age.value)console.info(isOpenEmail:,isOpenEmail.value)console.info(content:,content.value)console.info(score:,score.value)})//直接使用defineModel接受父组件通过v-model传过来的值//子组件这边自定义一个name属性来接收父组件那边传过来的v-model(testName)的值,简写形式如下const namedefineModel(testName)//完整写法/*const name defineModel(testName,{type: String,//字符串类型default: //默认值为空})*///子组件这边自定义一个age属性来接收父组件那边传过来的v-model(testAge)的值const age defineModel(testAge,{type: Number,//整型类型default: 0//默认值为0})//子组件这边自定义一个isOpenEmail属性来接收父组件那边传过来的v-model(testIsOpenEmail)的值const isOpenEmail defineModel(testIsOpenEmail,{type: Boolean,//布尔类型default: false//默认值为false})//子组件这边自定义一个content属性来接收父组件那边传过来的v-model(testContent)的值const content defineModel(testContent,{type: Array,//数组类型default: []//默认值为空数组})//子组件这边自定义一个score属性来接收父组件那边传过来的v-model(testScore)的值const score defineModel(testScore,{type: Object,//对象类型default: {}//默认值为空对象}) /scriptstyle scoped/style浏览器结果如下: 父组件给子组件传方法 父组件代码: templatediv测试管理1页面/divdiv!--在父组件里面使用子组件TestChild--!--父组件向子组件传递一个方法,方法名为print--TestChild:printtestPrint//div /templatescript setup nametest-management1import {ref} from vue//引入子组件import TestChild from ./components/test-child.vue//定义print方法const testPrint () {console.info(我是父组件的testPrint方法。)} /scriptstyle scoped/style子组件代码: template!--显示父组件传过来的参数值--div子组件/div /templatescript setupimport {onMounted} from vue//页面初始化时执行onMounted(() {//调用父组件那边传过来的方法props.print()})//使用defineProps接受父组件穿传过来的参数const props defineProps({//从父组件那边接收一个方法,参数名叫printprint: {type: Function,//参数类型为Function方法类型default: () {}//默认一个空方法}})/scriptstyle scoped/style谷歌浏览器结果如下: 子组件调用父组件方法-使用defineEmits调用父组件方法 父组件代码: templatediv测试管理1页面/divdiv!--在父组件里面使用子组件TestChild--!--自定义一个testChange方法--TestChildtestChangechange//div /templatescript setup nametest-management1import {ref} from vue//引入子组件import TestChild from ./components/test-child.vue//父组件定义一个change方法const change (val) {console.info(我是父组件的change方法,参数值为:,val)}/scriptstyle scoped/style子组件代码: template!--子组件--div我是子组件!--不使用js的话,模版页面直接调用父方法并传递参数写法如下:-- !-- el-button click$emit(testChange,2222)/el-button--/div /templatescript setup//使用defineEmits接收父组件自定义的testChange方法const emitdefineEmits([testChange])//子组件调用父组件中的testChange方法,并给该方法传递了一个参数值为2222emit(testChange, 2222) /scriptstyle scoped/style浏览器结果如下: 子组件暴露属性和方法给父组件调用-使用defineExpose暴露子组件属性和方法 子组件代码: template!--子组件--divdivname名字为:{{name}}/divdivage年龄为:{{age}}/divdivisOpenEmail是否开通邮箱为:{{isOpenEmail}}/divdivcontent内容为:{{content}}/divdivscore分数为:{{score}}/div/div /templatescript setupimport {ref} from vue//定义name值const nameref(张三)//定义age值const ageref(18)//定义isOpenEmail开通邮箱值const isOpenEmailref(false)//定义content值const contentref([测试值1,测试值2,测试值3])//定义score值const scoreref({curriculum:语文,score:60})//测试方法const test (val) {console.info(我是子组件的test方法,参数值是,val)}//使用defineExpose暴露属性和方法,暴露了name,age,isOpenEmail,content,score这5个属性值和1个test方法给父组件调用defineExpose({name,age,isOpenEmail,content,score,test}) /scriptstyle scoped/style父组件代码: templatediv测试管理1页面/divdiv!--在父组件里面使用子组件TestChild--!--如果子组件里面暴露了属性和方法,子组件必须要加ref才能在父组件中调用子组件里面的属性和方法--TestChild reftestChildRef//div /templatescript setup nametest-management1import {ref,onMounted} from vue//引入子组件import TestChild from ./components/test-child.vue//页面初始化加载onMounted(() {//调用子组件里面的暴露的属性和方法,要用ref去调用console.info(父组件中调用子组件中属性值:)console.info(name值:,testChildRef.value.name)console.info(age值:,testChildRef.value.age)console.info(isOpenEmail值:,testChildRef.value.isOpenEmail)console.info(content值:,testChildRef.value.content)console.info(score值:,testChildRef.value.score)console.info(父组件中调用子组件中方法:)testChildRef.value.test(111)})//子组件ref名称const testChildRefref()/scriptstyle scoped/style浏览器结果如下: 注意事项 如果父组件中调用了子组件未暴露的属性或者方法或者不存在的属性和方法那么浏览器控制台会报错如下 父子组件的传值和方法互相调用就学习到这里了后面要是遇到新的方式在扩展。
http://www.w-s-a.com/news/663850/

相关文章:

  • 网站高端建设wordpress订单系统
  • 建设网站成本增加网站备案
  • 行业网站建设方案百度云图片转wordpress
  • 如何建设网站推广平台营销客户管理软件
  • 网站制作南宁如何撰写一个网站规划建设方案
  • 建站网站和维护需要会什么杭州人防质监站网址
  • 唐山免费做网站莱芜吧贴吧最新消息
  • 韶关市建设工程造价网站网络营销的平台有哪些
  • 网站建设费大概多少钱成都网站建设低价
  • 做表格的网站东莞常平房价
  • 国家级建设网站高密做网站哪家强价位
  • 江西省新的建设厅三类人员网站做标记网站
  • 做最精彩绳艺网站产品设计培训
  • 营销型网站建设品牌深圳网络推广最新招聘
  • 单位网站等级保护必须做吗广州app软件开发公司
  • 免费flash网站模板怎么仿网站链接
  • 泉州网站建设哪家好平面设计转行做什么比较好
  • 忘记网站备案账号设计一个网站
  • 国内购物网站哪个最好海珠营销网站建设报价
  • 小型网站搭建logo免费制作
  • dede 网站模板哈尔滨房产信息网官方网站
  • 设计师个人作品集模板班级优化大师网页版登录
  • 高端网站建设教学网站开发前期准备工作
  • 网站评论列表模板设计官网的
  • 怎么做可以访问网站ui设计自学学的出来吗
  • 网站如何接入支付宝软件开发工作内容描述
  • 廊坊网站建设搭建整合营销传播的效果表现为
  • 网站服务器在本地是指园林绿化
  • 公司网站建设需要什么科目网站代运营价格
  • 网站建设前的ER图ppt模板图片 背景