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

电商网站 厦门动态手机网站

电商网站 厦门,动态手机网站,网站建设的实验原理,wordpress 后台列表provide 和 inject 实现爷孙组件通信 介绍 provide 和 inject 是 Vue.js 提供的一种在组件之间共享数据的机制#xff0c;它允许在组件树中的任何地方注入依赖项。这对于跨越多个层级的组件间通信特别有用#xff0c;因此无需手动将 prop 数据逐层传递下去。 provide#…provide 和 inject 实现爷孙组件通信 介绍 provide 和 inject 是 Vue.js 提供的一种在组件之间共享数据的机制它允许在组件树中的任何地方注入依赖项。这对于跨越多个层级的组件间通信特别有用因此无需手动将 prop 数据逐层传递下去。 provide 在一个组件中使用 provide 方法来定义要提供的数据或方法。 provide 方法返回一个对象该对象包含了要提供的数据或方法。 inject 在另一个组件中使用 inject 方法来注入这些数据或方法。 inject 方法接收一个数组或对象指明要注入的数据或方法名称。 实现原理 provide 方法 当你在组件中定义 provide 方法时Vue.js 会执行以下步骤 创建 provide 对象 provide() {return {sharedData: Hello from App component!,updateData: this.updateData}; }附加到组件实例Vue.js 会在组件实例上附加一个 _provided 属性存储 provide 方法返回的对象。 inject 方法 当你在组件中定义 inject 方法时Vue.js 会执行以下步骤 查找 provide 对象Vue.js 会从当前组件及其祖先组件中查找 _provided 属性。 如果找到则将相应的数据或方法注入到当前组件中。 注入到组件实例注入的数据或方法会作为属性添加到当前组件实例上可以通过 this 访问。 优点 简化多层级组件通信不需要逐层传递 props可以方便地在组件树中的任意位置提供和注入数据。 灵活性高可以动态地提供和注入数据或方法适用于多种场景。 减少代码冗余减少了逐层传递 props 的代码量提高了代码的可读性和可维护性。 缺点 调试困难由于数据传递路径不明确调试时可能比较困难尤其是在大型项目中。 组件关系模糊组件之间的依赖关系变得不清晰可能导致代码难以理解和维护。 性能开销大量使用 provide 和 inject 可能导致额外的性能开销特别是在复杂的应用中。 滥用问题如果过度使用 provide 和 inject可能会导致组件之间的耦合度过高降低代码的可维护性。 vue2.x 使用 grandpa.vue 组件(爷) 使用 provide 方法提供了 message, message2 字符串和一个 sendGradpaMessage 方法。 sendGradpaMessage 方法用于接收子组件传递的消息。 // grandpa.vuetemplatediv classgrandpah2爷组件/h2parent //div /templatescript import parent from ./parent.vue;export default {name: grandpa,data() {return {}},provide() {return {message: This is some shared data1,message2: This is some shared data2,sendGradpaMessage: this.getSendMessage};},components: {parent},methods: {getSendMessage(message) {console.log(Message received:, message);}} } /scriptparent.vue 组件(父) 使用 inject 方法注入了从爷组件提供的 message 参数。 // parent.vuetemplatediv classparenth2父组件/h2span{{ message }}/spanson //div /templatescript import son from ./son.vue;export default {name: parent,data() {return {}},inject: [message],components: { son },methods: {} } /scriptson.vue 组件(子) 使用 inject 方法注入了从爷组件提供的 message2 字符串和一个 sendGradpaMessage 方法。 当点击按钮时调用 sendGradpaMessage 方法将消息传递给祖先组件。 // son.vuetemplatediv classsonh2孙组件/h2span{{ message2 }}/spanel-button typeprimary clicksendMessage发送消息/el-button/div /templatescript export default {name: son,data() {return {}},inject: [message2, sendGradpaMessage],methods: {sendMessage() {const msg Hello from son component!;this.sendGradpaMessage(msg);}} } /script上述示例中: grandpa.vue 组件通过 provide 方法提供了 message, message2 两个参数和一个名为 sendGradpaMessage 的方法。 parent.vue 组件通过 inject 接收了 message 参数并在模板中使用 message。 son.vue 组件通过 inject 接收了 message2 参数并在模板中使用 message同时通过点击按钮触发 sendGradpaMessage 方法将参数 msg 传给了 grandpa.vue 组件。 类型检查 inject 的配置项可以是一个数组或者一个对象。当使用对象形式时可以指定更多的配置选项比如类型检查、默认值等。 配置选项详解 from指定 inject 要注入的数据的键名。如果没有指定则默认为 inject 的键名。 default如果没有从祖先组件中找到对应的数据则使用这个默认值。这对于确保组件即使在缺少某些数据的情况下也能正常工作是非常有用的。 from 和 default 的组合你可以同时指定 from 和 default在这种情况下如果 from 指定的数据不存在则使用 default 中定义的值。 例如你可以指定默认值和别名 inject: {// 定义别名为 message2 的数据其来源为 message2message2: { from: message2,// 如果没有提供则使用默认值default: Default value if not provided},// 定义别名为 sendGradpaMessage 的方法sendGradpaMessage: {from: sendGradpaMessage,// 如果没有提供则使用一个空函数作为默认值default: () {}} }vue3.x 使用 在 Vue 3.x 中provide 和 inject 的使用方式有所变化主要是因为引入了 Composition API。在 Composition API 中provide 和 inject 的使用更加灵活并且通常在 setup 函数中进行操作。 注意事项: 1. Composition API 中的使用 在 Vue 3.x 中provide 和 inject 必须在 setup 函数中使用。 provide 通常用来向子组件提供数据或方法。 inject 用来从父组件或其他祖先组件获取数据或方法。 2. 响应式处理 当使用 provide 提供一个响应式对象时Vue 3.x 会自动处理它的响应性。然而如果提供的数据不是响应式的那么注入的数据也不会是响应式的。 3. 类型安全 在 TypeScript 项目中可以使用类型注解来确保 provide 和 inject 的类型安全。 4. 默认值 在 Vue 3.x 中inject 可以接受一个默认值作为第二个参数如果找不到对应的 provide 数据则使用默认值。 5. 调试 使用 provide 和 inject 时确保在开发过程中使用 Vue Devtools 来帮助跟踪数据流。 示例 grandpa.vue 组件(爷) 使用 provide 方法提供了 message, message2 字符串和一个 sendGradpaMessage 方法。 sendGradpaMessage 方法用于接收子组件传递的消息。 // grandpa.vuetemplatediv classgrandpah2爷组件/h2div{{ num1 }}/divparent //div /templatescript setup langts namegrandpa import { provide, ref } from vue;import parent from ./parent.vue;// 定义一个可变的值 const message ref(Hello from grandpa); const message2 ref(Hello from Parent);let num1 ref(0); // 使用 provide 将这个值暴露给子组件 provide(message, message); provide(message2, message2); provide(sendGradpaMessage, getSendMessage);// 接受 son 组件传递的参数 function getSendMessage(num: number) {console.log(msg::: , num);num1.value num } /scriptparent.vue 组件(父) 使用 inject 方法注入了从爷组件提供的 message2 参数。 // parent.vuetemplatediv classparenth2父组件/h2span{{ message2 }}/spanson //div /templatescript setup langts nameparent import son from ./son.vue; import { inject, onMounted } from vue;// 使用 inject 获取父组件提供的值 const message2 inject(message2); /scriptson.vue 组件(子) 使用 inject 方法注入了从爷组件提供的 message2 字符串和一个 sendGradpaMessage 方法。 当点击按钮时调用 sendGradpaMessage 方法将消息传递给祖先组件。 // son.vuetemplatediv classsonh2孙组件/h2div{{ message }}/divel-button typeprimary clicksendMessage(111)发送消息/el-button/div /templatescript setup langts namesonimport { inject, onMounted } from vue;// 使用 inject 获取父组件提供的值 const message inject(message, 默认值);const sendMessage inject(sendGradpaMessage, (params: number) { });/script上述示例中: grandpa.vue 组件通过 provide 方法提供了 message, message2 两个参数和一个名为 sendGradpaMessage 的方法。 parent.vue 组件通过 inject 接收了 message 参数并在模板中使用 message。 son.vue 组件通过 inject 接收了 message2 参数并在模板中使用 message同时通过点击按钮触发 sendGradpaMessage 方法将参数 msg 传给了 grandpa.vue 组件。 总结 provide 和 inject 是 Vue.js 中一种用于跨越多个层级组件间通信的机制通过在组件中定义 provide 方法提供数据或方法并在其他组件中使用 inject 方法注入这些数据或方法从而简化了多层级组件间的通信。这种方式不仅减少了逐层传递 props 的代码量提高了代码的可读性和可维护性还支持动态提供和注入数据适用于多种场景。然而过度使用 provide 和 inject可能会导致组件之间的耦合度增加影响代码的调试和维护。
http://www.w-s-a.com/news/683232/

相关文章:

  • 现在建设的网站有什么劣势温州互联网公司
  • 重庆自助企业建站模板淘宝关键词top排行榜
  • 平邑网站制作买高端品牌网站
  • 深圳建网站三千网站安全代维
  • 西宁市精神文明建设网站装饰设计甲级资质
  • 做教育行业营销类型的网站徐州做网站多少钱
  • 临沂品牌网站制作企业网站建设搜集资料
  • wordpress注册验证码手机网站优化
  • 往建设厅网站上传东西做衣服的教程网站有哪些
  • 网上商城网站设计免费咨询口腔科医生回答在线
  • 南京网站c建设云世家 s浏览器
  • 如何做镜像别人网站wordpress菜单对齐修改
  • 长春网站建设net企业公示信息查询官网
  • 金鹏建设集团网站可在哪些网站做链接
  • 电子产品网站开发背景网站关键词优化方案
  • 建网站论坛wordpress提交数据库错误
  • 国内网站建设公司开源网站系统
  • 网站开发公司上大连网站建设流程图
  • 银川网站seo宁波网
  • 个人备案网站会影响吗网站添加 备案
  • 网站建设与电子商务的教案关于旅游网站建设的方案
  • 电子商务网站建设设计原则找做网站找那个平台做
  • 天津高端品牌网站建设韶关网站建设墨子
  • Wordpress多站点为什么注册不了2008iis搭建网站
  • 天津高端网站制作建网站的公司服务
  • 温州网站推广优化类似淘宝的网站怎么做的
  • 网站建设实训考试什么网站做玩具的比较多
  • 上海网站建设特点怎样给公司做一个网站做推广
  • 流量网站怎么做的济南优化排名公司
  • 保定网站制作套餐设计师导航网站大全