栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Vue 组件及组件间的通信

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Vue 组件及组件间的通信

一、什么是组件?

        组件 (Component) 是 Vue.js 最强大的功能之一。组件可以扩展 HTML 元素,封装可重用的代码。在较高层面上,组件是自定义元素,Vue.js 的编译器为它添加特殊功能。在有些情况下,组件也可以表现为用 is 特性进行了扩展的原生 HTML 元素。

二、创建全局组件:

    (一)Vue2.0的创建方式

       方式一:

             1、使用Vue.extend创建组件

                       var com1 = Vue.extend({

                            // 通过 template 属性,指定了组件要展示的HTML结构

                         template: '这是使用 Vue.extend 创建的组件'

                       })

            2、使用 Vue.component('组件的名称', 创建出来的组件模板对象) 注册组件

                        Vue.component('myCom1', com1)

        注意:如果使用Vue.Component 注册全局组件的时候,组件的名称使用了驼峰命名,则在引用组件的时候需要把大写的驼峰改为小写的字母,同时,两个单词之前,使用 “–” 链接。如果不使用则直接拿名称来使用即可。

        示例:

           

        方式二:

              直接使用Vue.component的方式创建                         

 Vue.component('mycom2', {

        template: '

                     这是直接使用 Vue.component 创建出来的组件

                     123

                   '

 })

       示例:

 

 

方式三

     1、被控制的 #app 外面,使用 template 元素,定义组件的HTML模板结构

      2、使用id注册组件

 Vue.component('mycom3', {

                template: '#tmpl'

 })

    示例:

      (二)Vue3.0中的创建方式:在main.js文件中注册

                  app.Component(“标签名”,组件名)

三、创建局部组件

         局部组件的创建和全局组件的创建方法一样。唯一区别的是,局部组件是在Vue实例中定义的

        

四、组件中的data 和 methods:

      1、组件可以拥有自己的数据

      2、组件中的data 和实例中的data 有点不一样,实例中的data 可以为一个对象。但是组件中的data必须是一个方法

      3、组件中的data除了是一个方法,还必须返回一个对象。

      4、组件中的data 的使用方式和 实例中的data 使用方式一样

      5、组件中的Methods 的定义和使用与实例中一样

      

五、组件间的通信方式

                         

          【组件间的关系】:A 和 B、B 和 C、B 和 D 都是父子关系,C 和 D 是兄弟关系,A 和 C 是隔代关系(可能隔多代)

        (一)父子间通信(props/$emit):父组件A通过props的方式向子组件B传递,B to A 通过在 B 组件中 $emit, A 组件中 v-on 的方式实现。

            1、父组件向子组件传值

               (1)子组件users.vue





           (2)父组件App.vue



【总结】父组件通过props向下传递数据给子组件。

【注】组件中的数据共有三种形式:data、props、computed

       2、子组件向父组件传值(通过事件形式)

          (1)子组件

 




           (2)父组件


      【总结】子组件通过events(事件)给父组件发送消息,实际上就是子组件把自己的数据发送到父组件。

       (二)兄弟间通信:使用第三方库mitt创建一个中央事件总线(事件中心),用它来触发(emit)事件和监听(on)事件,巧妙而轻量地实现了任何组件间的通信,包括父子、兄弟、跨级。当我们的项目比较大时,可以选择更好的状态管理解决方案vuex。

   示例:

        (1)安装mitt库:

               npm  install  mitt

        (2)创建事件中心(event.js)

import mitt from "mitt";
const emitter = mitt();
export default emitter;

        (3)创建兄弟组件

          Brother1.vue





          Brother2.vue





        App.vue



运行结果

                 

         (三)跨级通信(provide/inject)

             provide / inject 类似于消息的订阅和发布。provide 提供或发送数据, inject 接收数据。  

             Vue3 的 provide / inject 只能在 setup 期间调用,使用之前,必须从 vue 显示导入 provide/inject 方法。

            provide( name,value ):函数接收两个参数

                     name:定义提供 property 的 name 。

                     value :property 的值。

            inject(name,default):函数有两个参数

                     name:接收 provide 提供的属性名。

                    default:设置默认值,可以不写,是可选参数。

      附:setup钩子函数位于created 和beforeCreated之前,用于代替created 和beforeCreated

            (1)在setup函数中定义的变量和方法最后都是需要 return 出去的 不然无法再模板中使用

           (2)由于在执行 setup函数的时候,还没有执行 Created 生命周期方法,所以在 setup 函数中,无法使用 data 和 methods 的变量和方法

           (3)在setup函数里不能访问到this。由于我们不能在 setup函数中使用 data 和 methods,所以 Vue 为了避免我们错误的使用,直接将 setup函数中的this修改成了 undefined

           (4)setup函数只能是同步的不能是异步的

           (5)provide/inject 只能写在setup中

示例:

     QianLong.vue



      YongZheng.vue



        KangXi.vue



      App.vue



运行结果:

                       

六、总结

           组件间通信常见使用场景可以分为三类:

  • 父子通信:

           父向子传递数据是通过 props,子向父是通过 events($emit);

  • 兄弟通信:

            Bus(mitt);Vuex

  • 跨级通信:

            Bus(mitt);Vuex;provide / inject

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/995365.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号