组件通信
父子组件
-
props:父传子——父组件通过在子组件标签上绑定属性,使用
props将数据传递给子组件 -
自定义事件:子传父——子组件通过
$emit触发自定义事件,父组件可以在子组件上使用v-on或@监听这些事件,并在对应的方法中处理 -
refs:用
ref属性在父组件上给他的DOM和子组件命名,即可直接使用$refs获取DOM或者子组件的数据(父组件可访问、使用、修改子组件) -
$attrs和$listeners:父传孙——在父组件中给子组件定义一个属性,然后子组件自动传给孙组件,孙组件直接使用
$attrs.数据来获取父组件的数据;$listeners在父组件中绑定一个自定义事件,然后在子组件中通过@listeners:事件名来获取事件监听器(一般不推荐使用) -
$parent和$children:通过
$parent属性可以访问当前组件的直接父组件实例,然后使用this.$parent访问父组件的属性和方法;$children也一样,但是父组件使用时会返回一个数组,包含当前组件的所有子组件实例(一般不推荐使用)
非父子组件
-
EventBus:称为中央事件总线,就是创建一个专门用于非父子组件之间通信的vue实例,作为中央事件总线。通过
$emit触发事件,$on监听事件,实现跨组件通信 -
provide和inject:在父组件使用
provide提供数据,子组件使用inject接受数据,这是vue的高级特性 -
vuex:vuex是专门为vue.js应用程序开发的状态管理库。在store中全局存储和管理应用程序的状态,不同组件可以直接访问和修改store中共享的状态,实现组件之间的通信。vuex一般在多层级的项目中使用。
说一下你对vue的理解
-
vue是一种流行的前端JavaScript框架,用于构建用户界面。
-
vue有许多特性:
- 响应式数据:vue使用了数据劫持和观察的技术,使数据和视图之间保持同步。数据发生变化时,视图自动更新;反之,视图变化时也会影响到数据
- 组件化开发:vue可以把页面拆分成多个可重用的组件,每个组件都有自己的模版、样式和逻辑
- 虚拟DOM:vue使用虚拟DOM技术来提高渲染性能。vue会计算出虚拟DOM的差异,我们只对需要更新的部分进行实际DOM操作,比如说在一堆li标签使用虚拟DOM对比以后,只需更新某一个对比有差异的li标签
- 指令和过滤器:vue提供了丰富的指令和过滤器
- 生态系统丰富:vue有一个扩展生态系统,如vue-router、vuex、vue-cli