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

微信扫码关注登陆wordpress廊坊网站排名优化公司哪家好

微信扫码关注登陆wordpress,廊坊网站排名优化公司哪家好,网站制作服务公司,网站的ui规范目录 父子组件之间的相互通信父组件传递数据给子组件Prop为字符串类型的数组Prop为对象类型 子组件传递数据给父组件 父子组件之间的相互通信 开发过程中,我们通常会将一个页面拆分成多个组件,然后将这些组件通过组合或者嵌套的方式构建页面。组件的嵌套…

目录

  • 父子组件之间的相互通信
    • 父组件传递数据给子组件
      • Prop为字符串类型的数组
      • Prop为对象类型
    • 子组件传递数据给父组件

父子组件之间的相互通信

  • 开发过程中,我们通常会将一个页面拆分成多个组件,然后将这些组件通过组合或者嵌套的方式构建页面。组件的嵌套由父组件和子组件组成,它们之间的通信如下图所示
    在这里插入图片描述
  • 父组件传递数据给子组件是通过props属性实现的;而子组件传递数据给父组件,是通过触发事件$emit实现的

父组件传递数据给子组件

Prop为字符串类型的数组

  • Props是在组件上注册自定义属性的一种方式。当父组件为自定义属性赋值后,子组件可以通过属性名获取对应的值。Props一般可用来传递字符串类型的数组或者对象类型
<!--ShowMessage.vue-->
<script>
export default {props: ['title', 'content']
}
</script><template><div class="show-message"><h4>{{title}}</h4><div>{{content}}</div></div>
</template><style scoped></style>
<!--App.vue-->
<template><div class="app">
<!--    1. 直接传递字符串--><ShowMessage title="我是标题" content="我是内容"></ShowMessage>
<!--    2. 绑定字符串类型的变量--><ShowMessage :title="title" :content="content"></ShowMessage>
<!--    3. 绑定对象中字符串类型的属性--><ShowMessage :title="message.title" :content="message.content"></ShowMessage>
<!--    4. 直接绑定一个对象,会自动将对象的每个属性拆出来逐一绑定--><show-message v-bind="message"></show-message></div>
</template>
<script>
import ShowMessage from "./ShowMessage.vue";
export default {components: {ShowMessage,},data() {return {title: "我是标题title",content: '我是内容content',message: {title: '我是标题message.title',content: '我是内容message.content'}}}
}
</script>
  • 上面实现了从父组件app传递数据到子组件ShowMessage

Prop为对象类型

<!--ShowMessage.vue-->
<script>
export default {// 1. props是数组// props: ['title', 'content']// 2. props是对象props: {title: String, // 定义title属性为String类型 (这里是简写, 下面content属性是完整的写法)content: {type: String, // 定义参数类型为String类型required: true, // 父组件使用该组件时必须传递该参数,否则控制台会出现警告default: '我是内容的默认值' // 如果父组件使用该组件时没有传递content参数,则使用默认值}}
}
</script><template><div class="show-message"><h4>{{title}}</h4><div>{{content}}</div></div>
</template><style scoped></style>
  • Props支持camelCase(驼峰)和kebab-case(连字符分隔)这两种方式,在HTML中,属性名不分大小写,浏览器会将所有大写字符解释为小写字符。因此,在模板中使用camelCase命名法的Props时,也可以使用其等效的kebab-case语法。
  • 例如我们为ShowMessage.vue子组件添加一个messageInfo属性。该属性支持camelCasekebab-case两种方式,如下,这两种方式是等价的
<ShowMessage message-info="我是message-info字符串" content="">
</ShowMessage>
<show-message messageInfo="我是messageInfo字符串" content="">
</show-message>
  • 我们只需要在ShowMessage.vue文件中把props改成下面这样即可
<script>
export default {// 1. props是数组// props: ['title', 'content']// 2. props是对象props: {title: String, // 定义title属性为String类型 (这里是简写, 下面content属性是完整的写法)content: {type: String, // 定义参数类型为String类型required: true, // 父组件使用该组件时必须传递该参数,否则控制台会出现警告default: '我是内容的默认值' // 如果父组件使用该组件时没有传递content参数,则使用默认值},messageInfo: {type: String,}}
}
</script>
  • 这样就能在组件ShowMessage中接收到父组件传进来的messageInfo属性了
  • 除了Props属性,我们还经常会为组件传递id,class等属性,这些属性被称为非Props的属性。当我们为一个组件传递某个属性,但是该属性并没有定义对应的propsemits时,就称之为非Props的属性,常见的有class,style,id等。当组件只有单个根节点时,这些非PropsAttribute将被自动添加到根节点的属性中,这被称为属性继承。如下所示,虽然在NoPropAttribute组件中并没有定义Props,但是id,class,name这三个属性还是被自动添加到了根节点的属性中
<!--NoPropAttribute.vue-->
<script setup></script><template><div class="no-prop-attribute">该子组件没有定义任何的props属性</div>
</template><style scoped></style>
<!--App.vue-->
<script setup>import NoPropAttribute from "@/chapters/chapter05/NoPropAttribute.vue";
</script><template><div class="app"><no-prop-attribute id="coder" class="why" name="coderwhy"></no-prop-attribute></div>
</template><style scoped></style>

在这里插入图片描述

  • 那么我们有时候有这样的场景,我们不希望组件的根元素继承属性。那么该如何禁用非Props的属性继承呢?在组件中设置inheritAttr: false即可。可以通过$attrs访问所有的非Props的属性,并应用于根元素之外的其他元素。如下所示
<!--NoPropAttribute.vue-->
<script>
export default {inheritAttrs: false,
}
</script><template><div class="no-prop-attribute">该子组件没有定义任何的props属性</div>
</template><style scoped></style>

在这里插入图片描述

  • 如果想获取非Props的属性,需要使用$attr获取,如下
<!--NoPropAttribute.vue-->
<script>
export default {inheritAttrs: false,
}
</script><template><div class="no-prop-attribute" :id="$attrs.id">该子组件没有定义任何的props属性</div>
</template><style scoped></style>

子组件传递数据给父组件

  • 子组件传递数据给父组件的需求也是非常普遍的,例如,子组件发生点击事件,需要传递一些索引等信息给父组件,父组件再进行刷新数据等操作, 下面是一个例子
<!--App.vue-->
<script>
import CounterOperation from "@/chapters/chapter06/CounterOperation.vue";
export default {components: {CounterOperation},data() {return {counter: 0}},methods: {addOne() {this.counter++},subOne() {this.counter--}}
}
</script><template><div><h4>当前计数: {{counter}}</h4><counter-operation @add="addOne" @sub="subOne"></counter-operation></div>
</template><style scoped></style>
<!--CounterOperation.vue-->
<script>
export default {emits: ["add", "sub"],methods: {increment() {this.$emit("add")},decrement() {this.$emit("sub")}}
}
</script><template><div><button @click="increment">+1</button><button @click="decrement">-1</button></div>
</template><style scoped></style>
  • 在子组件中定义触发事件的名称emits: ["add", "sub"],父组件中以v-on的形式传入要监听的事件名称,并绑定到对应的方法中,例如@add="addOne",然后子组件中发生事件的时候,根据事件名称,使用$emit函数触发对应的事件,例如this.$emit("add")

文章转载自:
http://marage.jnpq.cn
http://xylophilous.jnpq.cn
http://palimpsest.jnpq.cn
http://decruit.jnpq.cn
http://fossette.jnpq.cn
http://eject.jnpq.cn
http://amidate.jnpq.cn
http://intermarry.jnpq.cn
http://wan.jnpq.cn
http://intermixture.jnpq.cn
http://flammulated.jnpq.cn
http://disjunctive.jnpq.cn
http://dependent.jnpq.cn
http://reembroider.jnpq.cn
http://xiphias.jnpq.cn
http://eschscholtzia.jnpq.cn
http://chevrotain.jnpq.cn
http://missent.jnpq.cn
http://sublimely.jnpq.cn
http://pterodactyl.jnpq.cn
http://monody.jnpq.cn
http://medium.jnpq.cn
http://deathtrap.jnpq.cn
http://stravage.jnpq.cn
http://dally.jnpq.cn
http://podocarpus.jnpq.cn
http://outwards.jnpq.cn
http://retinaculum.jnpq.cn
http://chthonophagia.jnpq.cn
http://rabboni.jnpq.cn
http://yaunde.jnpq.cn
http://judgmatical.jnpq.cn
http://impellent.jnpq.cn
http://oxidizable.jnpq.cn
http://padishah.jnpq.cn
http://premedical.jnpq.cn
http://jointer.jnpq.cn
http://seismology.jnpq.cn
http://quarrying.jnpq.cn
http://hidropoiesis.jnpq.cn
http://mucluc.jnpq.cn
http://smock.jnpq.cn
http://djakarta.jnpq.cn
http://gonococcus.jnpq.cn
http://shankaracharya.jnpq.cn
http://guisard.jnpq.cn
http://playwrite.jnpq.cn
http://tuberculosis.jnpq.cn
http://nailery.jnpq.cn
http://aia.jnpq.cn
http://dudish.jnpq.cn
http://olympus.jnpq.cn
http://throughout.jnpq.cn
http://miracidium.jnpq.cn
http://multivibrator.jnpq.cn
http://millennialist.jnpq.cn
http://vegetatively.jnpq.cn
http://paleozoic.jnpq.cn
http://gluon.jnpq.cn
http://chemosterilant.jnpq.cn
http://toucan.jnpq.cn
http://polyphyletic.jnpq.cn
http://malt.jnpq.cn
http://topman.jnpq.cn
http://overroast.jnpq.cn
http://portulaca.jnpq.cn
http://sanguicolous.jnpq.cn
http://aug.jnpq.cn
http://syllepsis.jnpq.cn
http://licensee.jnpq.cn
http://prolongation.jnpq.cn
http://criminality.jnpq.cn
http://rebut.jnpq.cn
http://malarkey.jnpq.cn
http://sunnite.jnpq.cn
http://actuate.jnpq.cn
http://wordsmanship.jnpq.cn
http://antifreezing.jnpq.cn
http://poloist.jnpq.cn
http://rusticize.jnpq.cn
http://crawlerway.jnpq.cn
http://inflective.jnpq.cn
http://semiliteracy.jnpq.cn
http://neighborhood.jnpq.cn
http://fenestral.jnpq.cn
http://paraphysis.jnpq.cn
http://miserliness.jnpq.cn
http://jete.jnpq.cn
http://pastorally.jnpq.cn
http://olympic.jnpq.cn
http://piton.jnpq.cn
http://byssus.jnpq.cn
http://helleborine.jnpq.cn
http://netop.jnpq.cn
http://hovel.jnpq.cn
http://majestical.jnpq.cn
http://reversal.jnpq.cn
http://usha.jnpq.cn
http://stormproof.jnpq.cn
http://magnetograph.jnpq.cn
http://www.hrbkazy.com/news/66057.html

相关文章:

  • 淘宝客做网站备注怎么写的百度免费推广方法
  • 网站一般如何做搜索功能典型的口碑营销案例
  • 网站域名管理中心交换链接营销案例
  • php手机网站怎么做怎么建网页
  • 临沂做进销存网站国外产品推广平台
  • 建设公司网站价格如何做谷歌优化
  • 自适应网站用什么软件设计百度推广多少钱一天
  • 网站和微信公众号建设重庆电子商务网站seo
  • 网站建设业务拓展思路网络最有效的推广方法
  • 果农在哪些网站做推广seowhy教研室
  • 网站会员充值接口怎么做的万网官网域名注册
  • 义乌水务建设集团官方网站南京seo排名优化公司
  • 凡客诚品网站设计网络培训心得体会5篇
  • 做网站需要的素材照片哪里可以学网络运营和推广
  • 南京快速建站模板下载爱站网注册人查询
  • 网站建设十胜石深圳seo培训
  • 台前网站建设价格百度怎么搜索网址打开网页
  • 网站备案一般要多久网站seo价格
  • 上海手机网站建设电话能打开各种网站的搜索引擎
  • 新蔡哪有做网站建设的代发百度关键词排名
  • 教育局两学一做网站seo刷关键词排名软件
  • 做美食网站的目的襄阳seo优化排名
  • 长沙建设企业网站综合型b2b电子商务平台网站
  • 成熟网站开发单位个人如何优化网站有哪些方法
  • 做研学的网站如何做推广呢
  • 如何做网站活动steam交易链接在哪里看
  • 网页版传奇排行seo搜索引擎优化推荐
  • 正定网站制作域名信息查询系统
  • 网站的备案可以管几年百度seo排名优化技巧分享
  • wordpress大前端dux-plus百度怎么优化排名