vue组件通信几种方式,vue3.0组件通信_2

  vue组件通信几种方式,vue3.0组件通信

  本文将详细介绍Vue3中组件的以下七种通信方式:props、emit、v-model、refs、provide/inject、eventBus、vuex/pinia(状态管理工具)。有兴趣的可以了解一下。

  

目录

  写在前面。举个栗子Props模式emit模式v-model模式refs模式provide/inject模式事件总线状态管理工具的例子。

  

写在前面

  本文采用脚本设置,组合API,比option API更自由。具体请参考Vue文档中对这两种方式的描述。

  本文将介绍以下七种组件通信模式:

  PropSemitv-ModelRefSprovide/InjectEventBusVuex/PINIA(状态管理工具)开始做事啦~

  

举一个栗子

  俗话说不学会写demo就是耍流氓~

  本文将重点介绍如下演示,如下图所示:

  在上图中,列表和输入框分别是父子组件。根据值传递的方式不同,可能会调整谁是父组件,谁是子组件。

  

Props方式

  道具法是Vue中最常见的亲子传播方式,使用起来也比较简单。

  根据上面的演示,我们在父组件中定义数据和对数据的操作,子组件只渲染列表;

  父组件代码如下:

  模板

  !-子组件-

  子组件:list= list /子组件

  !-父组件-

  div class=child-wrap输入组

  投入

  v-model=值

  type=text

  窗体-控件

  Placeholder=请输入

  /

  div class=输入-组-追加

  button @ click= handle add class= BTN BTN-primary type= button

  增加

  /按钮

  /div

  /div

  /模板

  脚本设置

  从“vue”导入{ ref }

  从导入子组件。/child.vue

  const list=ref([JavaScript , HTML , CSS])

  常数值=ref( )

  //触发后添加事件处理程序

  const handleAdd=()={

  list.value.push(值.值)

  value.value=

  }

  /脚本

  子组件只需要呈现父组件传递的值。代码如下:

  模板

  ul class=父列表-组

  Li class= list-group-item v-for= I in poops . list :key= I { { I } }/Li

  /ul

  /模板

  脚本设置

  从“vue”导入{ defineProps }

  const poops=defineProps({

  列表:{

  类型:数组,

  默认值:()=[],

  },

  })

  /脚本

  

emit方式

  Emit模式也是Vue中最常见的组件通信模式,用于子组件传递给父组件;

  根据上面的演示,我们在父组件中定义列表,子组件只需要传递添加的值。

  子组件代码如下:

  模板

  div class=child-wrap输入组

  投入

  v-model=值

  type=text

  窗体-控件

  Placeholder=请输入

  /

  div class=输入-组-追加

  button @ click= handle submit class= BTN BTN-primary type= button

  增加

  /按钮

  /div

  /div

  /模板

  脚本设置

  从“vue”导入{ ref,defineEmits }

  常数值=ref( )

  const emisses=define emits([ add ])

  const handleSubmit=()={

  发出( add ,value.value)

  value.value=

  }

  /脚本

  单击子组件中的[Add]来发出一个自定义事件,并将添加的值作为参数传递。

  父组件代码如下:

  模板

  !-父组件-

  ul class=父列表-组

  Li class= list-group-item v-for= I in list :key= I { { I } }/Li

  /ul

  !-子组件-

  child-components @ add= handle add /child-components

  /模板

  脚本设置

  从“vue”导入{ ref }

  从导入子组件。/child.vue

  const list=ref([JavaScript , HTML , CSS])

  //触发后添加事件处理程序

  const handleAdd=value={

  list.value.push(值)

  }

  /脚本

  在父组件中,只需要监听子组件定义的事件,然后执行相应的添加操作。

  

v-model方式

  V-model是Vue中优秀的语法糖,比如下面的代码。

  child component v-model:title= page title /

  这是下面代码的简写情况

  子组件:title= page title @ update:title= page title=$ event /

  v型车确实简便了不少,现在我们就来看一下上面那个演示,如何用v型车实现。

  子组件

  模板

  div class=" child-wrap输入组

  投入

  v-model=值

  type=text

   class=窗体-控件

  占位符=请输入

  /

  div class=输入-组-追加

  按钮@ click=处理添加 class= BTN BTN-小学类型=按钮

  添加

  /按钮

  /div

  /div

  /模板

  脚本设置

  从“vue”导入{ ref,defineEmits,defineProps }

  常数值=ref( )

  const props=defineProps({

  列表:{

  类型:数组,

  默认值:()=[],

  },

  })

  const emisses=define emisses([ update:list ])

  //添加操作

  const handleAdd=()={

  const arr=props.list

  数组推送(值。值)

  发出(“更新:列表”,arr)

  value.value=

  }

  /脚本

  在子组件中我们首先定义小道具和发射,然后添加完成之后发射指定事件。

  :更新:*是某视频剪辑软件中的固定写法,*表示小道具中的某个属性名。

  父组件中使用就比较简单,代码如下:

  模板

  !-父组件-

  ul class=父列表-组

  Li class= list-group-item v-for= I in list :key= I { { I } }/Li

  /ul

  !-子组件-

  子组件v-model:list= list /子组件

  /模板

  脚本设置

  从“vue”导入{ ref }

  从导入子组件 child.vue

  const list=ref([JavaScript , HTML , CSS])

  /脚本

  

refs方式

  在使用选项式应用程序接口时,我们可以通过这个. refs.name的方式获取指定元素或者组件,但是组合式应用程序接口中就无法使用哪种方式获取。如果我们想要通过裁判员的方式获取组件或者元素,需要定义一个同名的裁判员对象,在组件挂载后就可以访问了。

  示例代码如下:

  模板

  ul class=父列表-组

  Li list-group-item v-for= I in childRefs? list :key=i

  {{ i }}

  /李

  /ul

  !-子组件裁判员的值与脚本中的保持一致-

  子组件ref=子引用/子组件

  !-父组件-

  /模板

  脚本设置

  从“vue”导入{ ref }

  从导入子组件 child.vue

  const childRefs=ref(null)

  /脚本

  子组件代码如下:

  模板

  div class=" child-wrap输入组

  投入

  v-model=值

  type=text

   class=窗体-控件

  占位符=请输入

  /

  div class=输入-组-追加

  按钮@ click=处理添加 class= BTN BTN-小学类型=按钮

  添加

  /按钮

  /div

  /div

  /模板

  脚本设置

  从“vue”导入{ ref,defineExpose }

  const list=ref([JavaScript , HTML , CSS])

  常数值=ref( )

  //添加触发后的事件处理函数

  const handleAdd=()={

  列表.值.推送(值。值)

  value.value=

  }

  defineExpose({ list })

  /脚本

  设置组件默认是关闭的,也即通过模板裁判员获取到的组件的公开实例,不会暴露任何在* *脚本设置中声明的绑定。如果需要公开需要通过****定义公开**** API暴露**。

  

provide/inject方式

  提供和注射是某视频剪辑软件中提供的一对API,该应用程序接口可以实现父组件向子组件传递数据,无论层级有多深,都可以通过这对应用程序接口实现。示例代码如下所示:

  父组件

  模板

  !-子组件-

  子组件/子组件

  !-父组件-

  div class=" child-wrap输入组

  投入

  v-model=值

  type=text

   class=窗体-控件

  占位符=请输入

  /

  div class=输入-组-追加

  按钮@ click=处理添加 class= BTN BTN-小学类型=按钮

  添加

  /按钮

  /div

  /div

  /模板

  脚本设置

  从“vue”导入{参考,提供}

  从导入子组件 child.vue

  const list=ref([JavaScript , HTML , CSS])

  常数值=ref( )

  //向子组件提供数据

  提供( list ,list.value)

  //添加触发后的事件处理函数

  const handleAdd=()={

  列表.值.推送(值。值)

  value.value=

  }

  /脚本

  子组件

  模板

  ul class=父列表-组

  Li class= list-group-item v-for= I in list :key= I { { I } }/Li

  /ul

  /模板

  脚本设置

  从“vue”导入{ inject }

  //接受父组件提供的数据

  const list=inject(list )

  /脚本

  

事件总线

  事件总线已从Vue3中移除,但可以在第三方工具的帮助下完成。Vue官方推荐mitt或者微型发射器;

  大多数情况下,不建议使用全局事件总线来实现组件通信。虽然简单粗暴,但是维护事件总线是很长一段时间的大问题,这里就不解释了。您可以阅读特定工具的文档。

  

状态管理工具

  Vuex和Pinia是Vue3中的状态管理工具,使用这两个工具可以轻松实现组件通信。由于这两个工具功能强大,这里就不赘述了,具体可以参考文档。

  以上是Vue3组件的七种通信模式的详细说明。更多关于Vue3组件通信方式的信息,请关注我们的其他相关文章!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: