vue组件通信方式汇总

这篇具有很好参考价值的文章主要介绍了vue组件通信方式汇总。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

之前学习了组件通信的6中方式
1-props:使用场景:【父组件给子组件传递数据
传递数据类型:
可能是函数:实质是子组件想给父组件传递数据;
可能不是函数:实质就是父组件给子组件传递数据

特殊情况:路由传递props
1:布尔值类型,把路由中params参数映射为组件props数据
2:对象,静态数据,很少用
3:函数,可以把路由中params|query参数映射为组件props数据

2-自定义事件 ​$emit $on
事件:原生DOM事件----【click|mouseenter........】
事件:自定义事件-----【子组件给父组件传递数据

3-$bus 全局事件总线
组件实例的原型的原型指向的Vue.prototype

4-pubsub-js【发布订阅消息】
*在vue中根本不用【React】 ----万能

5-Vuex[仓库] -----数据非持久化
state mutations actions getters modules

6-插槽-----父子通信【结构】
默认插槽
具名插槽
作用域插槽:子组件的数据来源于父组件,但是子组件的自己的结构有父亲决定。

1-event事件深入探讨

组件绑定原生DOM事件,并非原生DOM事件,而是所谓的自定义事件。如果你想把自定义事件变为原生DOM事件,需要加上修饰符.native修饰这个修饰符,可以把自定义事件【名字:原生DOM类型的】变为原生DOM事件。

比如组件Event1绑定了click事件,
<Event1 @click="handler1"></Event1>,
但是这个click事件不是我们理解的原生click事件,而是一个自定义事件。如果需要编程原生的click事件,需要加上修饰符.native。
<Event1 @click.native="handler1"></Event1>

vue组件通信方式汇总

 vue组件通信方式汇总
vue组件通信方式汇总

 vue组件通信方式汇总

2-v-model实现组件通信

v-model:指令,可以收集表单数据【text、radio、checkbox、range】等等
切记:v-model收集checkbox需要用数组收集

v-model:实现原理 :value @input

vue组件通信方式汇总

vue组件通信方式汇总

 上面两种写法效果是一样的。当然:value @input也可以实现父子数据同步。 

vue组件通信方式汇总

 vue组件通信方式汇总

 3-属性修饰符.sync

属性修饰符.sync,可以实现父子数据同步。在elementUI组件中出现,实现父子数据同步。 给子组件绑定一个自定义事件,事件的名字为update:money(必须取是这个名字)

vue组件通信方式汇总

 vue组件通信方式汇总

 以上写了一堆逻辑,其实可以使用sync来实现
vue组件通信方式汇总

  4-$attrs和$​listeners


$attrs:组件实例的属性,可以获取到父亲传递的props数据(前提子组件没有通过props接受)$listeners:组件实例的属性,可以获取到父亲传递自定义事件(对象形式呈现)。

vue组件通信方式汇总

 vue组件通信方式汇总

需要注意一点,由于title我们已经使用了props接受,所以在控制台this.$attrs中不会再出现title属性。

5-$children和$parent


ref:可以在父组件内部获取子组件---实现父子通信
$children:可以在父组件内部获取全部的子组件【返回数组】
$parent:可以在子组件内部获取唯一的父组件【返回组件实例】

vue组件通信方式汇总

 ref使用场景
当点击 "找小明借钱100"按钮的时候,baba的存款+100,小明的存款减去100;同样找小红借150元,baba的存款+150,小红的存款减去150;同样的套路可以写一份。

vue组件通信方式汇总

 vue组件通信方式汇总

 vue组件通信方式汇总

$children:使用场景:找 点击 "找所有的孩子借钱200"。

vue组件通信方式汇总

 $parent:可以在点击"给baba钱50"按钮中使用

vue组件通信方式汇总

 
如果项目中很多JS的逻辑相似,可以使用mixin。比如本实例当中,儿子组件和女儿组件中都有给baba多少钱,逻辑一样,所以我们可以抽取mixin来处理。同样在儿子组件和女儿组件使用mixin来引入使用就行。
vue组件通信方式汇总

 vue组件通信方式汇总

 vue组件通信方式汇总

6-插槽

作用域插槽:子组件的数据来源于父组件,但是子组件的自己的结构有父亲决定。
 

 vue组件通信方式汇总vue组件通信方式汇总

 src\pages\Communication\ScopeSlotTest\defSlot.vue

<template>
  <div>
      <h1>作用域插槽</h1>
      <List :todos="todos">
        <template v-slot="{todo,$index}">
            <h1 :style="{color:todo.isComplete?'red':'cyan'}">{{todo.text}}----{{$index}}</h1>
        </template>
      </List>
      <h1>默认插槽</h1>
      <Test><template><a href="http://www.baidu.com">百度</a></template></Test>
      <Test><template><div>轮播图的结构</div></template></Test>
      <div>*************************************</div>
      <Test1>        
         <template><p style="color:red;">我是填坑的爸爸---默认插槽</p></template><!-- 默认插槽 -->  
         <!-- #fbb其实就是slot='fbb' 简写方式,具名插槽的简写方式 -->       
         <template #fbb><p style="color:cyan;">我是填坑的爸爸---将来具名插槽---fbb</p></template><!-- 具名插槽 -->
         <!-- #fcc其实就是slot='fcc' 简写方式,具名插槽的简写方式 -->
         <template #fcc><p style="color:blue;">我是填坑的爸爸---将来具名插槽---fcc</p></template>
      </Test1>
  </div>
</template>

<script type="text/ecmascript-6">
  import List from './List'
  import Test from './Test'
  import Test1 from './Test1'
  export default {
    name: 'ScopeSlotTest',
    data () {
      return {
        todos: [
          {id: 1, text: 'AAA', isComplete: false},{id: 2, text: 'BBB', isComplete: true},
          {id: 3, text: 'CCC', isComplete: false},{id: 4, text: 'DDD', isComplete: false},
        ]
      }
    },
    components: {
      List,Test,Test1 
    }
  }
</script>

src\pages\Communication\ScopeSlotTest\List.vue

<template>
  <ul>
    <li v-for="(todo,index) in todos" :key="todo.id">
           <!-- 作用于插槽的使用 -->
           <!-- 下面写法起始不是props,就是作用域插槽的语法,将数据回传给父组件 -->
          <slot :todo="todo" :$index="index"></slot>
    </li>
  </ul>
</template>

<script>
export default {
  name: 'List',
  props: {
    todos: Array
  }
}
</script>

src\pages\Communication\ScopeSlotTest\Test\index.vue

<template>
  <div>
       <pre>学习-默认插槽</pre>
       <h1>我喜欢张杰的歌曲</h1>
       <!--
            slot,本身即为插槽,slot是一个全局组件、默认插槽
            底下相当于子组件留了一个'大坑'
        -->
       <slot></slot>
  </div>
</template>

<script>
export default {
  name: '',
}
</script>

<style scoped>

</style>

src\pages\Communication\ScopeSlotTest\Test1\index.vue文章来源地址https://www.toymoban.com/news/detail-433842.html

<template>
  <div>
      <pre>具名插槽</pre>
      <!-- 默认插槽:只能有一个-->
      <slot></slot>
      <!--具名插槽:可以有N个 -->
      <slot name="fbb"></slot>
      <slot name="fcc"></slot>
  </div>
</template>

<script>
export default {
  name: '',
}
</script>

<style scoped>

</style>

到了这里,关于vue组件通信方式汇总的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • vue 组件之间通信的方式

    1.父向子版  父组件设置自定义属性 子组件props接收 2.子向父版 父组件设置自定义方法并绑定接收的方法 子组件触发方法  3.全局事件总线   4.Vuex 用这个的话首先要装包或者创建工程的时候选择这个选项手脚架会给你装好 5.路由 抽象一点说路由也算通信方式的一种吧 这种

    2024年01月18日
    浏览(36)
  • 在vue中不同组件通信方式

    1.父子组件,通过prop 2.非父子组件,通过vuex或根vue转载器 一般是以上两种情况,但是还有一种比较特殊的情况,即孙子组件或更深层次的组件通信 上述如果父组件需要与grandson通信,除了vuex,必须先与son组件通信,再由son与grandson通信,在层级少的情况下没有问题,但是层

    2024年01月24日
    浏览(38)
  • Vue组件的通信方式有哪些?

    开始之前,我们把组件间通信这个词进行拆分 组件 通信 都知道组件是vue最强大的功能之一,vue中每一个 .vue 文件我们都可以视之为一个组件。通信指的是发送者通过某种媒体以某种格式来传递信息到收信者以达到某个目的。广义上,任何信息的交通都是通信组件间通信,即

    2023年04月10日
    浏览(36)
  • Vue3组件间的通信方式

    目录  1.props父向子组件通信 2.自定义事件 子向父组件通信 3.全局事件总线 4.v-model组件通信(父子组件数据同步) 绑定单个数据同步  绑定多个数据同步  5.useAttrs组件通信  6.ref与$parent ref获取子组件实例对象  $parent获取父组件实例对象  7.provide-inject 可以实现隔辈传输 8.

    2024年02月17日
    浏览(43)
  • VUE组件间通信的七种方式

    目录 1、 props / $emit (1)父组件向子组件传值(props的用法) (2)子组件向父组件传递数据($emit的用法) 2、ref / $refs 用法: 3、eventBus事件总线($emit / $on) (1)创建事件中心管理组件之间的通信 (2)发送事件假设有两个兄弟组件 firstCom和secondCom的父组件: 在firstCom组件

    2024年02月05日
    浏览(40)
  • 07-Vue技术栈之(组件之间的通信方式)

    前言: 组件之间通信的方式有很多种,比如 props 、 自定义事件 、 全局事件总线 、 消息订阅与发布 、 父链与子组件索引 、 插槽 、 Vuex 等都可以实现组件之间的通信。在这里我将介绍以下三种通信方式。 它是一种组件间通信的方式,适用于: 子组件 === 父组件 使用场景

    2024年02月07日
    浏览(91)
  • AI生成--Vue组件之间通信方式有哪些

    Vue组件之间通信方式有以下几种: 父子组件通信:父组件可以通过props传递数据给子组件,子组件通过$emit触发事件通知父组件。 兄弟组件通信:可以通过共同的父组件作为中介,兄弟组件通过 e m i t 和 emit和 e mi t 和 on触发和监听事件实现通信。 跨级组件通信:可以使用p

    2024年02月08日
    浏览(36)
  • Vue中的的通信方式有几种?隔代组件的通信你用那种方式解决?

    props/$emit 适用父子组件通信 ref与parent/children 适用父子组件通信 attrs/listeners,provide/inject 适用于隔代组件通信 vuex,EventBus (事件总线) 适用于父子、隔代、兄弟组件通信 slot 插槽方式 attrs实例 父组件(这时候我们传了两个参数title和type) 子组件(注意:子组件使用了title,那么

    2024年02月14日
    浏览(36)
  • vue3 组件间通信的方式(setup语法糖写法)

    该方式用于父传子,父组件以数据绑定的形式声明要传递的数据,子组件通过defineProps()方法创建props对象,即可拿到父组件传来的数据。 2. emit方式 emit 方式也是Vue中最常见的组件通信方式,该方式用于 子传父。 3、defineExpose 利用defineExpose+ref 可以得到组件里的方法和变量

    2024年02月12日
    浏览(46)
  • 【干货】Vue2.x 组件通信方式详解,这篇讲全了

    vue是数据驱动视图更新的框架, 我们平时开发,都会把页面不同模块拆分成一个一个vue组件, 所以对于vue来说组件间的数据通信非常重要,那么组件之间如何进行数据通信的呢? 首先我们需要知道在vue中组件之间存在什么样的关系, 才更容易理解他们的通信方式。 一般我们分

    2023年04月27日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包